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


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

Объектная модель текста (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 и начинаются с префикса тома, например tomWord.

Тип tomBool

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

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

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

TOM RTF

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

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

Элемент управления словом Значение
\ fi n Отступ первой строки (значение по умолчанию равно нулю).
\Держать Сохранить абзац нетронутым.
\ keepn Следите за следующим абзацем.
\ li n Отступ слева (значение по умолчанию равно нулю).
\ noline Нумеровка строки отсутствует.
\ nowidctlpar Отключите элемент управления вдовой или сиротой.
\ pagebb Страница останова перед абзацем.
\Пар Новый абзац.
\Приятель Сбрасывается в свойства абзаца по умолчанию.
\Ql По левому краю (по умолчанию).
\Qr Выровнено по правому краю.
\Qj Оправдано.
\Qc Центре.
\ ri n Отступ справа (значение по умолчанию равно нулю).
\ s n Стиль n.
\ sa n Пробел после (значение по умолчанию равно нулю).
\ sb n Пробел до (значение по умолчанию равно нулю).
\ sl n Если отсутствует или если n=1000, интервалы строк определяются самым высоким символом в строке (однострочный интервал); если нуль, по крайней мере этот размер используется; если 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 Bold.
\Шапки Все столицы.
\ cf n Цвет переднего плана (по умолчанию — tomAutocolor).
\ cs n Стиль символа n.
\ dn n Позиция подстрока в полуочках (значение по умолчанию — 6).
\ embo Тиснением.
\ f n Номер шрифта, n относится к записи в таблице шрифтов.
\ fs n Размер шрифта в полуочках (по умолчанию — 24).
\ выделение n Цвет фона (по умолчанию — tomAutocolor).
Курсив.
\ impr Отпечаток.
\ lang n Применяет язык к символу. n — это число, соответствующее языку. Слово \обычного элемента управления сбрасывает свойство языка на язык, определенный \ deflang n в свойствах документа.
\ nosupersub Отключает надстрочный или подстрочный знак.
\ outl Контур.
\Простой Сбрасывает свойства форматирования символов в значение по умолчанию, определенное приложением. Также сбрасываются связанные свойства форматирования символов (описанные в разделе "Связанные свойства символов" в спецификации RTF).
\ scaps Небольшие столицы.
\Шад Тень.
\Забастовку Зачеркнутый.
\Sub Применяет подстрок к тексту и уменьшает размер точки в соответствии с сведениями о шрифте.
\Супер Применяет надстрочный знак к тексту и уменьшает размер точки в соответствии с сведениями о шрифте.
\Ул Непрерывное подчеркивание. \ ul0 отключает все подчеркивание.
\Uld Пунктирное подчеркивание.
\ uldb Двойное подчеркивание.
\ ulnone Останавливает все подчеркивание.
\ ulw Подчеркивание слова.
\ up n Позиция надстроек в полуочках (значение по умолчанию — 6).
\v Скрытый текст.

 

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

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

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

В следующем примере показано, как использовать методы TOM для поиска текста, содержащего сочетания точного форматирования символов. Алгоритм ищет обычный текст в диапазоне совпадений, который называется pr1. Если найден обычный текст, он указывает на диапазон пробных версий, который называется pr2. Затем два диапазона точек вставки (prip1 и prip2) используются для обхода пробного диапазона, сравнивающего его форматирование символов с pr1таким. Если они совпадают точно, входной диапазон (заданный ppr) обновляется до точки в тексте пробного диапазона, а функция возвращает количество символов в сопоставленном диапазоне. Два объекта pf1 ITextFont и 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 Прокручивает текстовый диапазон в представление.
Уставка Выбирает текст в указанной точке или вверх.

 

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

Параметр варианта различных методов 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 Publishing Company: 1991, 1992.

Имя CType2 Значение Значение
Строго.
C2_LEFTTORIGHT 0x1 Слева направо.
C2_RIGHTTOLEFT 0x2 Справа налево.
Слабым:
C2_EUROPENUМБ ER 0x3 Европейское число, европейская цифра.
C2_EUROPESEPARATOR 0x4 Европейский числовой разделитель.
C2_EUROPETERMINATOR 0x5 Европейский числовой терминатор.
C2_ARABICNUМБ ER 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_SYМБ OL 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 Иврит КСА 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 Грузин 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 ЭнклAlphaNum 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 ЭнклCJK 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