共用方式為


關於文字物件模型

文字物件模型 (TOM) 定義一組文字操作介面,這些介面受到數個 Microsoft 文字解決方案的不同程度支援,包括豐富的編輯控件。 本主題提供 TOM 的高階概觀。 它會討論下列主題。

TOM 第 2 版物件

TOM 第 2 版 (TOM 2) 延伸原始文字物件模型:新的介面衍生自舊介面。 更新的 TOM API 包含對新字元和段落格式屬性的支持、數據表模型、多重選取範圍,以及數學和 Ruby 的內嵌物件支援。

最上層 TOM 2 物件是由 ITextDocument2 介面所定義,其具有建立和擷取物件階層中較低物件的方法。 針對簡單的純文本處理,您可以從 ITextDocument2 物件取得 ITextRange2 物件,並執行大部分動作。 如果您需要新增 RTF 格式設定,您可以從 ITextRange2 物件取得 ITextFont2 ITextPara2 物件。 ITextFont2 提供 Microsoft Word 格式字型對話框的程式設計對等專案,而 ITextPara2 則提供對等的 Word 格式段落對話框。

除了這三個較低層級的物件之外,TOM 2 還有一個選取物件 (ITextSelection2),這是具有選取醒目提示的 ITextRange2 物件,以及一些 UI 導向的方法。

範圍和選取物件包括螢幕導向方法,可讓程式檢查螢幕上可捲動的文字或可捲動到畫面上的文字。 例如,這些功能有助於讓視力受損的人能夠存取文字。

每個具有 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 物件描述一或多個連續的文字範圍,稱為 storys 劇本代表檔的各個部分,例如檔的主文字、頁首和頁尾、腳注、批注和 RTF 臨時板。 在線性格式化數學表達式與內建窗體之間翻譯時,會使用臨時板本文。 儲存即將變更內容時,也會使用臨時板本文來儲存目前複製來源的範圍內容。

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

請注意,如果刪除與 ITextRange 之類的 TOM 對象相關聯的編輯實例,TOM 物件就會變成無用的,而且其所有方法都會傳回CO_E_RELEASED。

除了 HRESULT 傳回值之外,許多方法都包含 out 參數,這些參數是用來傳回值的指標。 針對所有介面,您應該檢查所有指標參數,以確保它們在使用之前是非零的。 如果您將 null 值傳遞至需要有效指標的方法,此方法會傳回E_INVALIDARG。 忽略具有 Null 值的選擇性 out 指標。

使用方法搭配 Get 和 Set 前置詞來取得和設定屬性。 布爾值變數使用 tomFalse (0) 表示 FALSE,而 tomTrue (-1) 則為 TRUE

TOM 常數定義在 tomConstants 列舉類型中,並以 tom 前置詞開頭,例如 tomWord

tomBool 類型

許多 TOM 方法會針對具有二進位狀態的 RTF 屬性使用稱為 「tomBool」 的特殊變數類型。 tomBool 類型與布爾類型不同,因為它可能需要四個值:tomTrue、tomFalsetomToggletomUndefinedtomTrue 和 tomFalse 值表示 true 和 false。 tomToggle 值可用來切換屬性。 tomUndefined 值,較傳統稱為 NINCH,是一個特殊的無輸入、無變更值,適用於 longs、floats 和 COLORREFs。 對於字串, tomUndefined (或 NINCH) 是由 Null 字串表示。 對於屬性設定作業,使用 tomUndefined 並不會變更目標屬性。 對於屬性取得作業, tomUndefined 表示範圍中的字元有不同的值(它會在屬性對話框中提供灰色複選框)。

數學建置和建置

您可以使用 ITextRange2::BuildUpMath 方法,將線性格式化的數學表達式轉換成內建版本。 ITextRange2::Linearize 方法會執行相反的轉換,稱為線性化或向下建置,以將數學表達式的內建版本轉換為線性格式。 當您需要匯出純文本或啟用特定類型的編輯時,數學建置功能很有用。

TOM RTF

在 TOM 中,RTF 可以透過一組明確的方法呼叫或 RTF 中的 RTF 傳輸 RTF 來完成 RT-Text 交換。 本節提供段落屬性和字元屬性的 RTF 控制件字表。

TOM RTF 段落控制字組

控制字組 意義
\ fi n 第一行縮排(預設值為零)。
\保持 保留段落不變。
\ 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 倍單行間距。
\ tb n 左邊界的直方圖索引標籤位置,以 twip 為單位。
\ tldot 索引標籤前置點。
\ tleq 索引標籤領導者等號。
\ tlhyph 索引標籤領導者連字元。
\ tlth 索引標籤前置粗線。
\ tlul 索引標籤前導符底線。
\Tqc 置中索引標籤。
\ tqdec 十進位索引標籤。
\ tqr [排清右] 索引標籤。
\ tx n 左邊界的定位點位置,以 Twip 為單位。

 

TOM RTF 字元格式控制字組

控制字組 意義
\ animation n 將動畫類型設定為 n
\b 粗體。
\帽 所有大寫。
\ cf n 前景色彩(預設值為 tomAutocolor)。
\ cs n 字元樣式 n.
\ dn n 下標位置以半點為單位(預設值為 6)。
\ embo 浮雕。
\ f n 字型大小, n 是指字型表格中的專案。
\ fs n 字型大小以半點為單位(預設值為24)。
\ highlight n 背景色彩(預設值為 tomAutocolor)。
\我 斜體。
\ impr 印記。
\ lang n 將語言套用至字元。 n 是對應至語言的數位。 \ 純控件字會將語言屬性重設為文件屬性中 \ deflang n 所定義的語言。
\ nosupersub 關閉上標或下標。
\ outl 大綱。
\平原 將字元格式設定屬性重設為應用程式所定義的預設值。 相關聯的字元格式設定屬性(如 RTF 規格中的關聯字元屬性一節所述)也會重設。
\ scaps 小資本。
\ shad 陰影。
\罷工 Strikethrough.
\子 會根據字型資訊,套用文字的下標並縮減點大小。
\超級 將上標套用至文字,並根據字型信息減少點大小。
\Ul 連續底線。 \ ul0 會關閉所有底線。
\ uld 點線底線。
\ uldb 雙底線。
\ ulnone 停止所有底線。
\ ulw 字底線。
\ up n 上標位置以半分為單位(預設值為 6)。
\v 隱藏的文字。

 

尋找 RTF

您可以使用 TOM 方法來尋找文字範圍所定義的 RTF。 在文字處理中,尋找這類 RTF 通常是必要的,雖然它從未在「你所看到的是你得到的東西」(WYSIWYG)字處理器中完成。 有一個較大的 RTF 比對領域,允許忽略某些字元格式設定屬性(或包含段落格式設定和/或物件內容),但這類一般化超出本節的範圍。

這項功能的其中一個用途是使用 RTF 尋找 對話框來定義您想要在檔案中尋找的 RTF。 對話框會使用豐富的編輯控件來實作,而 TOM 方法會用來透過文件執行搜尋。 您可以將所需的 RTF 文字從檔案複製到 [尋找] 對話框,或直接在 [尋找] 對話框中輸入並格式化它。

下列範例示範如何使用 TOM 方法來尋找包含確切字元格式組合的文字。 演算法會在比對範圍中搜尋純文字,其名稱為 pr1。 如果找到純文本,則會以名為 pr2的試用範圍指出。 然後,會使用兩個插入點範圍 (prip1prip2) 來逐步執行試驗範圍,並將其字元格式與的 pr1比較。 如果它們完全相符,則會更新輸入範圍(由 ppr指定),以指向試用範圍的文字,且函式會傳回相符範圍中的字元計數。 字元格式比較中會使用兩個 ITextFont 物件 pf1pf2 它們會附加至插入點範圍 prip1prip2

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 透過 ITextSelectionITextRange 介面提供輔助功能支援。 本節說明對輔助功能很有用的方法,以及程式如何判斷 物件的 xy 螢幕位置。

由於UI型輔助功能程式通常會使用螢幕和滑鼠,因此常見的考慮是尋找目前滑鼠位置的對應 ITextDocument 介面(在螢幕座標中)。 下列各節提供兩種方式來判斷適當的介面:

如需詳細資訊,請參閱 Microsoft Active Accessibility 規格。 從螢幕位置取得對象之後,您可以用於 ITextDocument 介面,並呼叫 RangeFromPoint 方法,以取得與螢幕位置相對應之 cp 的空白範圍物件。

來自執行中對象數據表的介面

執行中的物件數據表 (ROT) 會指出哪些物件實例為使用中。 藉由查詢此資料表,您可以在對象已經執行時,加速將用戶端連線到物件的程式。 在程式可以透過執行中的對象數據表存取 TOM 介面之前,具有視窗的 TOM 實例必須使用 Moniker 在 ROT 中註冊。 您可以從包含其 HWND 十六進位值的字串建構 Moniker。 下列程式代碼範例示範如何執行這項操作。

// 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,然後將此訊息傳送至該 HWNDEM_GETOLEINTERFACE訊息具有豐富的編輯特定,並傳回 lParam 所尋址變數中 IRichEditOle 介面的指標

提示 如果傳回指標(請務必在傳送訊息之前將 lParam 指向 Null 的物件設定為 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 將文字範圍卷動到檢視中。
SetPoint 選取指定點或向上的文字。

 

字元比對集

ITextRange各種Move* 方法的 variant 參數,例如 MoveWhile MoveUntil,可以採用明確的字串或字元比對集 32 位索引。 索引是由 Unicode 範圍或 GetStringTypeEx 字元集所定義。 從 n 開始且長度為 l (<32768) 的 Unicode 範圍是由索引 n + (l<<16) + 0x80000000所指定。 例如,基本希臘文字母是由 CR_Greek = 0x805f0370 定義,可列印的 ASCII 字元是由 CR_ASCIIPrint = 0x805e0020 所定義。 此外, MoveWhileMoveUntil 方法可讓您快速略過任何 GetStringTypeEx 字元集中的字元範圍,或在不在上述任何字元集中的字元範圍中。

GetStringTypeEx 集合是由 Ctype1Ctype2Ctype3 的值所指定,並定義如下。

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 類型支援 Unicode 文字的適當配置。 指派方向屬性,讓 Unicode 標準化的雙向配置演算法產生精確的結果。 這些類型互斥。 如需使用這些屬性的詳細資訊,請參閱 Unicode 標準:全球字元編碼、磁碟區 1 和 2、Addison-Wesley Publishing Company: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 類型是一般文字處理或標準 C 連結庫函式所需 POSIX 類型的擴充功能佔位符。

CType3 名稱 意義
C3_NONSPACING 0x1 非步調標記。
C3_DIACRITIC 0x2 變音符號非步調標記。
C3_VOWELMARK 0x4 Vowel 非步調標記。
C3_SYMBOL 0x8 象徵。
C3_KATAKANA 0x10 片假名字符。
C3_HIRAGANA 0x20 平假名字符。
C3_HALFWIDTH 0x40 半角字元。
C3_FULLWIDTH 0x80 全角字元。
C3_IDEOGRAPH 0x100 表像字元。
C3_KASHIDA 0x200 阿拉伯文 Kashida 字元。
C3_ALPHA 0x8000 所有語言字元(字母、教學大綱和表觀)。
C3_NOTAPPLICABLE 0x0 不適用。

 

編輯開發工具套件 (EDK) 可以包含 Unicode 標準中所述下列範圍的 pVar 索引定義。

字元集 Unicode 範圍 字元集 Unicode 範圍
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 Hebrew 0x590— 0x5ff
BasicHebrew 0x5d0— 0x5ea 希伯來文XA 0x590— 0x5cf
希伯來文XB 0x5eb— 0x5ff 阿拉伯文 0x600— 0x6ff
BasicArabic 0x600— 0x652 ArabicX 0x653— 0x6ff
Devangari 0x900— 0x97f 班格拉(前本加利) 0x980— 0x9ff
果魯穆奇文 0xa00— 0xa7f 古吉拉特文 0xa80— 0xaff
奧迪亞(前奧里亞) 0xb00— 0xb7f 坦米爾文 0xb80— 0xbff
Teluga 0xc00— 0xc7f 坎那達文 0xc80— 0xcff
馬來亞拉姆文 0xd00— 0xd7f 泰文 0xe00— 0xe7f
寮文 0xe80— 0xeff 喬治亞文X 0x10a0— 0xa0cf
BascGeorgian 0x10d0— 0x10ff Jamo 0x1100— 0x11ff
LatinXAdd 0x1e00— 0x1eff 希臘文X 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
韓文 0xac00— 0xd7ff UTF16Lead 0xd800— 0xdbff
UTF16Trail 0xdc00— 0xdfff PrivateUse 0xe000— 0xf800
CJKCompIdeog 0xf900— 0xfaff AlphaPres 0xfb00— 0xfb4f
ArabicPresA 0xfb50— 0xfdff CombHalfMark 0xfe20— 0xfe2f
CJKCompForm 0xfe30— 0xfe4f SmallFormVar 0xfe50— 0xfe6f
ArabicPresB 0xfe70— 0xfefe HalfFullForm 0xff00— 0xffef
特價 0xfff0— 0xfffd