Поделиться через


О текстовой объектной модели

Объектная модель текста (TOM) определяет набор интерфейсов обработки текста, которые поддерживаются в различных уровнях несколькими текстовыми решениями Майкрософт, включая элемент управления расширенными изменениями. В этом разделе представлены основные сведения о TOM. В ней рассматриваются следующие темы.

Объекты TOM версии 2

TOM версии 2 (TOM 2) расширяет исходную текстовую объектную модель; новые интерфейсы являются производными от старых. Обновленный API TOM включает поддержку новых свойств формата символов и абзаца, табличную модель, множественное выделение и встроенную поддержку объектов для формул и ruby.

Объект TOM 2 верхнего уровня определяется интерфейсом ITextDocument2, который имеет методы для создания и извлечения объектов ниже в иерархии объектов. Для простой обработки обычного текста можно получить объект ITextRange2 из объекта ITextDocument2 и сделать все с этим. Если необходимо добавить форматирование текста, можно получить объекты ITextFont2 и ITextPara2 из объекта ITextRange2. ITextFont2 предоставляет программный эквивалент диалогового окна форматирования шрифта в Microsoft Word, а ITextPara2 предоставляет программный эквивалент диалогового окна форматирования абзаца в Word.

Помимо этих трех объектов нижнего уровня, TOM 2 имеет объект выделения (ITextSelection2), который является объектом ITextRange2 с выделением и некоторыми ориентированными на пользовательский интерфейс методами.

Объекты диапазона и выделения включают методы, ориентированные на экран, позволяющие программам анализировать текст на экране или текст, который можно прокрутить на экран. Эти возможности помогают сделать текст доступным для людей с нарушениями зрения, например.

Каждый интерфейс с суффиксом 2 наследуется от соответствующего интерфейса без суффикса 2. Например, ITextDocument2 наследует от ITextDocument.

Объекты TOM 2 имеют следующую иерархию.

ITextDocument2         Top-level editing object
    ITextRange2        Primary text interface: a range of text
        ITextFont2     Character-attribute interface
        ITextPara2     Paragraph-attribute interface
        ITextRow       Table interface
    ITextSelection2    Screen highlighted text range
        ITextRange2    Selection inherits all range methods
    ITextDisplays      Displays collection (not yet defined)
    ITextStrings       Rich-text strings collection
    ITextStoryRanges2  Enumerator for stories in document

Объект ITextDocument2 описывает один или несколько смежных диапазонов текста, называемых историями. Истории представляют различные элементы документа, такие как основной текст документа, верхние и нижние колонтитулы, сноски, заметки и блокноты с форматированным текстом. История черновика используется при переводе между линейно отформатированными математическими выражениями и развернутой формой. История с нуля также используется при сохранении содержимого диапазона, который является текущим источником копирования при изменении содержимого.

Объект ITextRange2 определяется его смещениями начальной и конечной позицией символов и объектом истории. Он не существует независимо от родительского объекта истории, хотя его текст можно скопировать в буфер обмена или в другие целевые объекты. Объект диапазона текста отличается от электронных таблиц и других объектов диапазона, которые определяются другими типами смещения; например, положение строки или столбца или графики (x, y). Объект диапазона текста может изменять себя различными способами, может возвращать дубликат самого себя, и его можно командовать для копирования позиций начального и конечного символа и указателя истории на текущий выделенный фрагмент.

Явный объект истории не нужен, так как объект ITextRange всегда можно создать для представления любой конкретной истории. В частности, объект ITextDocument может создать объект ITextStoryRanges для перечисления историй в документе с точки зрения диапазонов с значениями позиций начального и конечного символов, описывающих полные истории (например, 0 и tomForward).

При использовании объекта ITextStoryRanges2 явный объект истории не нужен, так как каждая история описывается объектом ITextRange2. В частности, объект ITextDocument2 может создать объект ITextStoryRanges2 для перечисления историй в документе с точки зрения диапазонов с значениями положения начального и конечного символов, описывающими полные истории (например, 0 и tomForward).

Интерфейс ITextRow вместе с ITextRange::Move и ITextRange::Expand предоставляет возможность вставки, запроса и изменения таблиц.

Соглашения об интерфейсе TOM

Все методы TOM возвращают значения HRESULT. Как правило, методы TOM возвращают следующие стандартные значения.

  • E_OUTOFMEMORY (Ошибка: Недостаточно памяти)
  • E_INVALIDARG
  • E_NOTIMPL
  • E_FILENOTFOUND
  • E_ACCESSDENIED
  • E_FAIL
  • CO_E_RELEASED
  • NOERROR (аналогично S_OK)
  • S_FALSE

Помните, что если экземпляр редактирования, связанный с объектом TOM, например ITextRange удаляется, объект TOM становится бесполезным, а все его методы возвращают CO_E_RELEASED.

Помимо возвращаемых значений HRESULT, многие методы включают выходные параметры в виде указателей, используемых для возврата значений. Для всех интерфейсов необходимо убедиться, что все указатели имеют ненулевые значения до их использования. При передаче значения NULL методу, требующего допустимого указателя, метод возвращает E_INVALIDARG. Необязательные указатели со значениями NULL игнорируются.

Используйте методы с префиксами Get и Set для получения и задания свойств. Логические переменные используют tomFalse (0) для обозначения FALSEи tomTrue (-1) для обозначения TRUE.

Константы TOM определяются в типа перечисления tomConstants и начинаются с префикса tom, например tomWord.

Тип tomBool

Многие методы TOM используют специальный тип переменной с именем tomBool для атрибутов форматированного текста, имеющих двоичные состояния. Тип tomBool отличается от логического типа, так как он может принимать четыре значения: tomTrue, tomFalse, tomToggleи tomUndefined. Значения tomTrue и tomFalse указывают значение true и false. Значение tomToggle используется для переключения свойства. Значение tomUndefined, более традиционно называемое NINCH, представляет собой специальное значение без ввода и без изменений, которое работает с типами long, с плавающей точкой и COLORREF. Для строк tomUndefined (или NINCH) представлена строкой NULL. Для операций с параметрами свойств использование tomUndefined не изменяет целевое свойство. Для операций получения свойств tomUndefined означает, что символы в диапазоне имеют разные значения (это представлено в виде серого флажка в диалоговых окнах свойств).

Увеличение и уменьшение в математике

Вы можете использовать метод ITextRange2::BuildUpMath для преобразования линейных математических выражений в встроенные версии. Метод ITextRange2::Linearize выполняет противоположное преобразование, называемое линеаризацией или разверткой, для преобразования сложных версий математических выражений обратно в линейный формат. Возможность создания математических сборок полезна, если необходимо экспортировать обычный текст или включить определенные типы редактирования.

TOM RTF

В TOM обмен форматированным текстом можно выполнить с помощью наборов явных вызовов методов или передачи форматированного текста в формате RTF. В этом разделе приведены таблицы слов элемента управления RTF для свойств абзаца и свойств символов.

управляющие слова абзацев TOM RTF

Управляющее слово Значение
\ fi n Отступ первой строки (значение по умолчанию равно нулю).
\хранить Сохранить абзац нетронутым.
хранение Следите за следующим абзацем.
\ li n Отступ слева (значение по умолчанию равно нулю).
\ noline Нумеровка строки отсутствует.
\ nowidctlpar Отключите элемент управления вдовой или сиротой.
\ pagebb Разрыв страницы перед абзацем.
\par Новый абзац.
\pard Сбрасывает свойства абзаца на значения по умолчанию.
\ ql По левому краю (по умолчанию).
\ qr Выровнено по правому краю.
\ qj Оправданный.
\ qc Центрированный.
\ ri n Отступ справа (значение по умолчанию равно нулю).
\ s n Стиль n.
\ sa n Пробел после (значение по умолчанию равно нулю).
\ sb n Пробел перед текстом (по умолчанию — ноль).
\ sl n Если отсутствует или если n=1000, интервалы строк определяются самым высоким символом в строке (междустрочный интервал); Значение , если n> ноль, используется по крайней мере этот размер; Если n равно нулю <, точно |n| используется. Межстрочный интервал будет установлен как кратный, если указан параметр \ slmult 1.
\ slmult m Следует \ sl. m = ноль: интервалы строк "по крайней мере" или "точно", как описано в \sl n. m = 1: интервалы строк = n/240 умноженные на однострочный интервал.
\ тб n Позиция вкладки "Линейчатая панель" (в поворотах) из левого поля.
\ tldot Точки для заполнения пространства табуляции.
\ tleq Лидер табуляции: знак равенства.
\ tlhyph Лидеры табуляции в виде дефисов.
\ tlth Толстая линия лидера табуляции.
\ tlul Подчеркивание лидера табуляции.
\ tqc Центрированная вкладка.
\ tqdec Десятичная вкладка.
\ tqr Вкладка flush-right.
\ tx n Позиция табуляции в твипах от левого поля.

 

слова элемента управления форматом символов TOM RTF

Управляющее слово Значение
\ анимация n Задает тип анимации для n.
\ b Смелый.
\прописные буквы Все столицы.
\ cf n Цвет переднего плана (по умолчанию используется tomAutocolor).
\ cs n Стиль символов n.
\ dn n Позиция подстрочного индекса в полуторных пунктах (значение по умолчанию — 6).
эмбо Рельефный.
\ f n Номер шрифта, n ссылается на запись в таблице шрифтов.
\ fs n Размер шрифта в полуочках (по умолчанию — 24).
\ выделение n Цвет фона (по умолчанию используется tomAutocolor).
\ i Курсив.
\ impr Отпечаток.
\ lang n Применяет язык к символу. n — это число, соответствующее языку. Слово управления \plain сбрасывает свойство языка на язык, определенный \deflang n в свойствах документа.
\ nosupersub Выключает режим надстрочного или подстрочного написания.
\ outl Очертание.
\равнина Сбрасывает свойства форматирования символов в значение по умолчанию, определенное приложением. Также сбрасываются связанные свойства форматирования символов (описанные в разделе "Связанные свойства символов" в спецификации RTF).
\ scaps Малые заглавные буквы.
\шэд Тень.
\забастовка Зачеркнутый текст.
\суб Применяет нижний индекс к тексту и уменьшает размер шрифта в соответствии с сведениями о шрифте.
\супер Применяет надстрочный знак к тексту и уменьшает размер точки в соответствии с сведениями о шрифте.
\ ul Непрерывное подчеркивание. \ ul0 отключает все подчеркивание.
\ uld Точечное подчеркивание.
\ uldb Двойное подчеркивание.
\ ulnone Прекращает всё подчеркивание.
\ ulw Подчеркивание слова.
\ вверх n Позиция надстрочного текста в половинных пунктах (по умолчанию — 6).
\ v Скрытый текст.

 

Поиск форматированного текста

Методы TOM можно использовать для поиска форматированного текста в соответствии с диапазоном текста. Поиск такого форматированного текста часто требуется в обработке текстов, хотя он никогда не был реализован в текстовом редакторе с функцией WYSIWYG. Существует явно больший домен сопоставления форматированного текста, который позволяет игнорировать некоторые свойства форматирования символов (или включать форматирование абзаца и /или содержимое объекта), но такие обобщения выходят за рамки этого раздела.

Одной из целей этой функции является использование диалогового окна поиска с форматированным текстом для определения текста, который вы хотите найти в документе. Диалоговое окно будет реализовано с помощью расширенного элемента управления редактирования, а методы TOM будут использоваться для выполнения поиска по документу. Вы можете скопировать нужный форматированный текст из документа в диалоговое окно Поиск или ввести и отформатировать его непосредственно в диалоговом окне Поиск.

В следующем примере показано, как использовать методы TOM для поиска текста, содержащего сочетания точного форматирования символов. Алгоритм выполняет поиск обычного текста в диапазоне совпадений, который называется pr1. Если найден обычный текст, он указывает на диапазон тестирования, который называется pr2. Затем два диапазона точек вставки (prip1 и prip2) используются для обхода пробного диапазона, сравнивающего форматирование символов с pr1. Если они совпадают точно, входной диапазон (заданный ppr) обновляется, чтобы указывать на текст пробного диапазона, и функция возвращает количество символов в совпадающем диапазоне. Два объекта ITextFont, pf1 и pf2, используются для сравнения форматирования символов. Они присоединяются к диапазонам точек вставки prip1 и prip2.

LONG FindRichText (
    ITextRange **ppr,             // Ptr to range to search
    ITextRange *pr1)              // Range with rich text to find
{
    BSTR        bstr;             // pr1 plain-text to search for
    LONG        cch;              // Text string count
    LONG        cch1, cch2;       // tomCharFormat run char counts
    LONG        cchMatch = 0;     // Nothing matched yet
    LONG        cp;               // Handy char position
    LONG        cpFirst1;         // pr1 cpFirst
    LONG        cpFirst2;         // pr2 cpFirst
    ITextFont  *    pf1, *pf      // Fonts corresponding to IPs prip1 and prip2
    ITextRange *pr2;              // Range duplicate to search with
    ITextRange *prip1, *prip      // Insertion points to walk pr1, pr2

    if (!ppr || !*ppr || !pr1)
        return E_INVALIDARG;

    // Initialize range and font objects used in search
    if ((*ppr)->GetDuplicate(&pr2)    != NOERROR ||
        pr1->GetDuplicate(&prip1)     != NOERROR ||
        pr2->GetDuplicate(&prip2)     != NOERROR ||
        prip1->GetFont(&pf1)          != NOERROR ||
        prip2->GetFont(&pf2)          != NOERROR ||
        pr1->GetText(&bstr)           != NOERROR )
    {
        return E_OUTOFMEMORY;
    }

    pr1->GetStart(&cpFirst1);

    // Keep searching till rich text is matched or no more plain-text hits
    while(!cchMatch && pr2->FindText(bstr, tomForward, 0, &cch) == NOERROR)
    {
        pr2->GetStart(&cpFirst2);                 // pr2 is a new trial range
        prip1->SetRange(cpFirst1, cpFirst1);      // Set up IPs to scan match
        prip2->SetRange(cpFirst2, cpFirst2);      //  and trial ranges

        while(cch > 0 &&
            pf1->IsEqual(pf2, NULL) == NOERROR)   // Walk match & trial ranges
        {                                         //  together comparing font
            prip1->GetStart(&cch1);               //  properties
            prip1->Move(tomCharFormat, 1, NULL);
            prip1->GetStart(&cp);
            cch1 = cp - cch1;                     // cch of next match font run

            prip2->GetStart(&cch2);
            prip2->Move(tomCharFormat, 1, NULL);
            prip2->GetStart(&cp);
            cch2 = cp - cch2;                      // cch of next trial font run

            if(cch1 < cch)                         // There is more to compare
            {
                if(cch1 != cch2)                   // Different run lengths:
                    break;                         //  no formatting match
                cch = cch - cch1;                  // Matched format run
            }
            else if(cch2 < cch)                    // Trial range format run too
                break;                             //  short

            else                                   // Both match and trial runs
            {                                      //  reach at least to match
                pr2->GetEnd(&cp);                  //  text end: rich-text match
                (*ppr)->SetRange(cpFirst2, cp)     // Set input range to hit
                cchMatch = cp - cpFirst2;          //  coordinates and return
                break;                             //  length of matched string
            }
        }
    }
    pr2->Release();
    prip1->Release();
    prip2->Release();
    pf1->Release();
    pf2->Release();
    SysFreeString(bstr);

    return cchMatch;
}

Специальные возможности TOM

TOM предоставляет поддержку специальных возможностей с помощью интерфейса ITextSelection и интерфейса ITextRange. В этом разделе описываются методы, полезные для доступности, а также то, как программа может определить x, y положение объекта на экране.

Так как программы специальных возможностей, основанные на пользовательском интерфейсе, обычно работают с экраном и мышью, важно найти соответствующий интерфейс ITextDocument для текущего расположения мыши (в координатах экрана). В следующих разделах представлены два способа определения правильного интерфейса:

Дополнительные сведения см. в спецификации Microsoft Active Accessibility. После получения объекта из положения экрана можно использовать интерфейс ITextDocument и вызвать метод RangeFromPoint, чтобы получить пустой объект диапазона в cp, соответствующий этому положению экрана.

Интерфейс из запущенной таблицы объектов

Запущенная таблица объектов (ROT) указывает, какие экземпляры объектов активны. Запросив эту таблицу, можно ускорить процесс подключения клиента к объекту, когда объект уже запущен. Прежде чем программы смогут получить доступ к интерфейсам TOM через запущенную таблицу объектов, необходимо, чтобы экземпляр TOM с окном зарегистрировал себя в ROT с помощью уникального имени. Вы создаете моникер из строки, содержащей шестнадцатеричное значение HWND. В следующем примере кода показано, как это сделать.

// This TOM implementation code is executed when a new windowed 
// instance starts up. 
// Variables with leading underscores are members of this class.

HRESULT hr;
OLECHAR szBuf[10];            // Place to put moniker
MONIKER *pmk;

hr = StringCchPrintf(szBuff, 10, "%x", _hwnd);
if (FAILED(hr))
{
    //
    // TODO: write error handler
    //
}
CreateFileMoniker(szBuf, &pmk);
OleStdRegisterAsRunning(this, pmk, &_dwROTcookie);
....................
 
// Accessibility Client: 
//    Find hwnd for window pointed to by mouse cursor.

GetCursorPos(&pt);
hwnd = WindowFromPoint(pt);

// Look in ROT (running object table) for an object attached to hwnd

hr = StringCchPrintf(szBuff, 10, "%x", hwnd);
if (FAILED(hr))
{
    //
    // TODO: write error handler
    //
}
CreateFileMoniker(szBuf, &pmk);
CreateBindContext(0, &pbc);
pmk->BindToObject(pbc, NULL, IID_ITextDocument, &pDoc);
pbc->Release();

if( pDoc )
{
    pDoc->RangeFromPoint(pt.x, pt.y, &pRange);
    // ...now do whatever with the range pRange
}

Интерфейс через сообщения окон

Сообщение EM_GETOLEINTERFACE предоставляет другой способ получения интерфейса IUnknown для объекта в заданной позиции экрана. Как описано в интерфейсе из запущенной таблицы объектов, вы получите HWND для положения экрана, а затем отправьте это сообщение HWND. Сообщение EM_GETOLEINTERFACE имеет широкий характер редактирования и возвращает указатель на интерфейс IRichEditOle в переменной, адресованной lParam.

совет Если возвращается указатель (обязательно задайте объект, которому lParam указывает значение NULL перед отправкой сообщения), можно вызвать его метод IUnknown::QueryInterface, чтобы получить интерфейс ITextDocument. В следующем примере кода показан этот подход.

    HWND    hwnd;
    ITextDocument *pDoc;
    ITextRange *pRange;
    POINT    pt;
    IUnknown *pUnk = NULL;
    
    GetCursorPos(&pt);
    hwnd = WindowFromPoint(pt);
    SendMessage(hwnd, EM_GETOLEINTERFACE, 0, (LPARAM)&pUnk);
    if(pUnk && 
        pUnk->QueryInterface(IID_ITextDocument, &pDoc) == NOERROR)
    {
        pDoc->RangeFromPoint(pt.x, pt.y, &pRange);
        //  ... continue with rest of program
    }

Методы, ориентированные на доступность

Некоторые методы TOM особенно полезны для навигации по экрану, в то время как другие методы TOM расширяют возможности при прибытии в интересные места. В следующей таблице описаны наиболее полезные методы.

Метод Как это способствует доступности
GetSelection Этот метод получает активный выбор, который можно использовать для различных целей, ориентированных на представление, таких как выделение текста и прокрутка.
ДиапазонОтТочки При активном выделении этот метод гарантирует получение диапазона, связанного с определенным представлением.
развернуть Увеличивает текстовый диапазон так, чтобы содержащиеся в нем частичные единицы были полностью охвачены. Например, Expand(tomWindow) расширяет диапазон, чтобы включить видимую часть истории диапазона.
ПолучитьДубликат При использовании активного выделения этот метод гарантированно предоставляет диапазон, связанный с конкретным представлением. См. описание RangeFromPoint.
GetPoint Возвращает координаты экрана для позиции начального или конечного символа в текстовом диапазоне.
ScrollIntoView Прокручивает текстовый диапазон в видимую область.
SetPoint Выделяет текст до указанной точки включительно.

 

Наборы совпадений символов

Параметр различных методов Move* в ITextRange, таких как MoveWhile и MoveUntil, может принимать явную строку или 32-битный индекс для сопоставления символов. Индексы определяются диапазонами Юникода или наборами символов GetStringTypeEx. Диапазон Юникода, начиная с n и длины l (< 32768), присваивается индексом n + (l << 16) + 0x80000000. Например, базовые греческие буквы определяются CR_Greek = 0x805f0370 и печатными символами ASCII определяются CR_ASCIIPrint = 0x805e0020. Кроме того, методы MoveWhile и MoveUntil позволяют быстро пропустить диапазон символов в любом наборе символов GetStringTypeEx или диапазон символов, не входящих в какой-либо из этих наборов символов.

Наборы GetStringTypeEx задаются значениями Ctype1, Ctype2и Ctype3и определены следующим образом.

Cset Значение
Ctype1 Сочетание типов данных CT_CTYPE1.
Ctype2 + tomCType2 Любой тип CT_CTYPE2.
Ctype3 + tomCType3 Сочетание типов CT_CTYPE3.

 

В частности, Ctype1 может быть любым сочетанием следующего.

Имя Ctype1 Ценность Значение
C1_UPPER 0x0001 Верхний регистр.
C1_LOWER 0x0002 Нижний регистр.
C1_DIGIT 0x0004 Десятичные цифры.
C1_SPACE 0x0008 Пробелы.
C1_PUNCT 0x0010 Пунктуация.
C1_CNTRL 0x0020 Управляющие символы.
C1_BLANK 0x0040 Пустые символы.
C1_XDIGIT 0x0080 Шестнадцатеричные цифры.
C1_ALPHA 0x0100 Любой лингвистический символ (алфавитный, слоговой или идеографический).
C1_DEFINED 0x0200 Определенный символ, но не один из других типов C1_*.

 

Типы Ctype2 и поддерживают правильное оформление текста Юникода. Атрибуты направления назначаются таким образом, чтобы алгоритм двунаправленного макета, стандартизированный Юникодом, выдает точные результаты. Эти типы являются взаимоисключающими. Дополнительные сведения об использовании этих атрибутов см. в разделе Стандарт Юникода: кодировка символов по всему миру, тома 1 и 2, Addison-Wesley издательская компания: 1991, 1992.

Название CType2 Ценность Значение
Сильный:
C2_LEFTTORIGHT 0x1 Слева направо.
C2_RIGHTTOLEFT 0x2 Справа налево.
Слабый:
C2_EUROPENUMBER 0x3 Европейское число, европейская цифра.
C2_EUROPESEPARATOR 0x4 Европейский числовой разделитель.
C2_EUROPETERMINATOR 0x5 Европейский числовой терминатор.
C2_ARABICNUMBER 0x6 Арабский номер.
C2_COMMONSEPARATOR 0x7 Общий числовой разделитель.
Нейтральный:
C2_BLOCKSEPARATOR 0x8 Разделитель блоков.
C2_SEGMENTSEPARATOR 0x9 Разделитель сегментов.
C2_WHITESPACE 0xA Пустое пространство.
C2_OTHERNEUTRAL 0xB Другие нейтральные.
Неприменимо:
C2_NOTAPPLICABLE 0x0 Нет неявного направления.

 

Типы Ctype3 предназначены для расширений типов POSIX, необходимых для общей обработки текста или стандартных функций библиотекИ C.

Имя CType3 Ценность Значение
C3_NONSPACING 0x1 Неспециационная отметка.
C3_DIACRITIC 0x2 диакритический знак без отступа
C3_VOWELMARK 0x4 Неразделяющий знак гласной.
C3_SYMBOL 0x8 Символ.
C3_KATAKANA 0x10 Символ Катакана.
C3_HIRAGANA 0x20 Символ Хираганы.
C3_HALFWIDTH 0x40 Полуширинный символ.
C3_FULLWIDTH 0x80 Символ полной ширины.
C3_IDEOGRAPH 0x100 Идеографический символ.
C3_KASHIDA 0x200 Арабский символ Кашида.
C3_ALPHA 0x8000 Все лингвистические символы (буквенные, слоговые и идеографические).
C3_NOTAPPLICABLE 0x0 Неприменимо.

 

Набор инструментов редактирования (EDK) может включать определения индексов pVar для следующих диапазонов, описанных в стандарте Юникода.

Набор символов Диапазон Юникода Набор символов Диапазон Юникода
ASCII 0x0 — 0x7f ANSI (Американский национальный институт стандартов) 0x0 — 0xff
ASCIIPrint 0x20 — 0x7e Латиница1 0x20—0xff
Latin1Supp 0xa0 — 0xff LatinXA 0x100 — 0x17f
LatinXB 0x180 — 0x24f IPAX 0x250 — 0x2af
SpaceMod 0x2b0 — 0x2ff Комбинирование 0x300 — 0x36f
Греческий 0x370 — 0x3ff BasicGreek 0x370 — 0x3cf
Греческие Симболы 0x3d0 — 0x3ff Кириллический 0x400— 0x4ff
Армянский 0x530 — 0x58f Иврит 0x590 — 0x5ff
BasicHebrew 0x5d0— 0x5ea Иврит XA 0x590 — 0x5cf
ИвритXB 0x5eb — 0x5ff Арабский 0x600— 0x6ff
BasicArabic 0x600 — 0x652 ArabicX 0x653 — 0x6ff
Девангари 0x900 — 0x97f Бангла (ранее Бенгали) 0x980 — 0x9ff
Гурмухи 0xa00 — 0xa7f Гуджарати 0xa80—0xaff
Одия (ранее Ория) 0xb00—0xb7f Тамильский 0xb80 — 0xbff
Телуга 0xc00 — 0xc7f Каннада 0xc80 — 0xcff
Малаялам 0xd00 — 0xd7f Тайский 0xe00 — 0xe7f
Лаосский 0xe80 — 0xeff ГрузинX 0x10a0 — 0xa0cf
BascGeorgian 0x10d0— 0x10ff Джамо 0x1100 — 0x11ff
LatinXAdd 0x1e00—0x1eff ГрикИкс 0x1f00 — 0x1fff
GenPunct 0x2000 — 0x206f Надстрочный 0x2070 — 0x207f
Подстрочный 0x2080— 0x208f SuperSubscript 0x2070— 0x209f
Валюта 0x20a0 — 0x20cf КомбМаркиСим 0x20d0— 0x20ff
LetterLike 0x2100 — 0x214f NumberForms 0x2150 — 0x218f
Стрелки 0x2190— 0x21ff MathOps 0x2200 — 0x22ff
MiscTech 0x2300 — 0x23ff CtrlPictures 0x2400 — 0x243f
Оптическое Распознавание Символов 0x2440 — 0x245f ЭнклAlphaNum 0x2460 — x24ff
Рисование рамок 0x2500 — 0x257f BlockElement 0x2580 — 0x259f
GeometShapes 0x25a0— 0x25ff Разные символы 0x2600 — 0x26ff
Дингбаты 0x2700— 0x27bf CJKSymPunct 0x3000— 0x303f
Хирагана 0x3040— 0x309f Катакана 0x30a0 — 0x30ff
Bopomofo 0x3100 — 0x312f HangulJamo 0x3130 — 0x318f
CJLMisc 0x3190 — 0x319f ЭнклCJK 0x3200 — 0x32ff
CJKCompatibl 0x3300— 0x33ff Хан 0x3400 — 0xabff
Хангыль 0xac00 — 0xd7ff UTF16Lead 0xd800 — 0xdbff
UTF16Trail 0xdc00—0xdfff Частное использование 0xe000 — 0xf800
CJKCompIdeog 0xf900— 0xfaff AlphaPres 0xfb00 — 0xfb4f
Арабское PresA 0xfb50 — 0xfdff CombHalfMark 0xfe20— 0xfe2f
CJKCompForm 0xfe30 — 0xfe4f SmallFormVar 0xfe50 — 0xfe6f
Арабский PresB 0xfe70 — 0xfefe HalfFullForm 0xff00 — 0xffef
Акции 0xfff0—0xfffd