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

Текстовая объектная модель (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. Необязательные указатели с пустыми значениями игнорируются.

Используйте методы с префиксами 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, — это специальное значение без ввода, без изменения, которое работает с longs, floats и COLORREFs. Для строк значение tomUndefined (или NINCH) представлено пустой строкой. Для операций настройки свойств использование tomUndefined не изменяет целевое свойство. Для операций получения свойств tomUndefined означает, что символы в диапазоне имеют разные значения (он предоставляет серый флажок в диалоговых окнах свойств).

Математические сборки и сборка

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

TOM RTF

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

Слова элемента управления абзацами TOM RTF

Элемент управления словом Значение
\ fi n Отступ первой строки (значение по умолчанию равно нулю).
\ keep Сохранить абзац нетронутым.
\ keepn Следите за следующим абзацем.
\ 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 Вкладка справа от очистки.
\ tx n Позиция табуляции ( в витках) из левого поля.

 

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

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

 

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

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

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

В следующем примере показано, как использовать методы TOM для поиска текста, содержащего сочетания точного форматирования символов. Алгоритм выполняет поиск обычного текста в диапазоне совпадений, который называется pr1. Если найден обычный текст, он указывает на диапазон пробных версий, который называется pr2. Затем два диапазона точек вставки (prip1 и prip2) используются для прохода по диапазону пробных версий, сравнивая его форматирование символов с диапазоном pr1. Если они совпадают точно, входной диапазон (заданный по ppr) обновляется, указывая на текст пробного диапазона, и функция возвращает количество символов в сопоставленном диапазоне. Два объекта pf1ITextFont и 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 Этот метод получает активный выбор, который можно использовать для различных представлений, таких как выделение текста и прокрутка.
RangeFromPoint При использовании в активном выборе этот метод гарантированно получает диапазон, связанный с определенным представлением.
Разверните Увеличивает текстовый диапазон таким образом, чтобы все части, содержащиеся в нем, полностью содержали. Например, расширяет диапазон, Expand(tomWindow) чтобы включить видимую часть истории диапазона.
GetDuplicate При использовании в активном выборе этот метод гарантированно получает диапазон, связанный с определенным представлением. См. описание RangeFromPoint.
GetPoint Получает координаты экрана для позиции начального или конечного символа в текстовом диапазоне.
ScrollIntoView Прокручивает текстовый диапазон в представление.
Уставка Выделяет текст в указанной точке или вверх по ней.

 

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

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

 

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

Набор знаков Диапазон Юникода Набор знаков Диапазон Юникода
ASCII 0x0 — 0x7f ANSI 0x0 — 0xff
ASCIIPrint 0x20 — 0x7e Latin1 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 Иврит 0x590 — 0x5cf
ИвритXB 0x5eb — 0x5ff Арабский 0x600 — 0x6ff
BasicArabic 0x600 — 0x652 Арабский 0x653 — 0x6ff
Девангари 0x900 — 0x97f Бангала (ранее Бенгали) 0x980 — 0x9ff
Гурмукхи 0xa00 — 0xa7f Гуджарати 0xa80 — 0xaff
Одия (ранее Ория) 0xb00 — 0xb7f Тамильский 0xb80 — 0xbff
Телуга 0xc00 — 0xc7f Каннада 0xc80 — 0xcff
Малаялам 0xd00 — 0xd7f Тайский 0xe00 — 0xe7f
Лаосский 0xe80 — 0xeff GeorgianX 0x10a0 — 0xa0cf
BascGeorgian 0x10d0 — 0x10ff Джамо 0x1100 — 0x11ff
LatinXAdd 0x1e00 — 0x1eff Греческий 0x1f00 — 0x1fff
GenPunct 0x2000 — 0x206f Надстрочный 0x2070 — 0x207f
Подстрочный 0x2080 — 0x208f SuperSubscript 0x2070 — 0x209f
Валюта 0x20a0 — 0x20cf CombMarkSym 0x20d0 — 0x20ff
LetterLike 0x2100 — 0x214f NumberForms 0x2150 — 0x218f
Стрелки 0x2190 — 0x21ff MathOps 0x2200 — 0x22ff
MiscTech 0x2300 — 0x23ff CtrlPictures 0x2400 — 0x243f
OptCharRecog 0x2440 — 0x245f EnclAlphaNum 0x2460 — x24ff
BoxDrawing 0x2500 — 0x257f BlockElement 0x2580 — 0x259f
GeometShapes 0x25a0 — 0x25ff MiscSymbols 0x2600 — 0x26ff
Дингбаты 0x2700 — 0x27bf CJKSymPunct 0x3000 — 0x303f
Хирагана 0x3040 — 0x309f Катакана 0x30a0 — 0x30ff
Бопомофо 0x3100 — 0x312f HangulJamo 0x3130 — 0x318f
CJLMisc 0x3190 — 0x319f EnclCJK 0x3200 — 0x32ff
CJKCompatibl 0x3300 — 0x33ff Хан 0x3400 — 0xabff
Символы Хангула (Hangul) 0xac00 — 0xd7ff UTF16Lead 0xd800 — 0xdbff
UTF16Trail 0xdc00 — 0xdfff PrivateUse 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