關於文字物件模型
文字物件模型 (TOM) 定義一組文字作介面,這些介面由數個Microsoft文字解決方案支援,包括豐富的編輯控件。 本主題提供 TOM 的高階概觀。 它會討論下列主題。
TOM 版本 2 的物件
TOM 第 2 版 (TOM 2) 延伸原始文字物件模型:新的介面衍生自舊介面。 更新的 TOM API 包含對新字元和段落格式屬性的支持、數據表模型、多重選取範圍,以及數學和 Ruby 的內嵌物件支援。
最上層 TOM 2 物件是由 ITextDocument2 介面所定義,其具有建立和擷取物件階層中較低物件的方法。 針對簡單的純文本處理,您可以從 ITextDocument2 物件中取得 ITextRange2 物件,並用它做大多數需要的操作。 如果您需要新增豐富文本格式,您可以從 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 物件描述一個或多個連續的文字範圍,這些範圍稱為 故事。 段落代表文件的各個部分,例如文件的主文字、頁首和頁尾、腳注、批註以及豐富文本便條板。 在線性格式化數學表達式與堆疊形式之間翻譯時,會使用草稿故事。 當即將變更範圍內容時,會使用備忘錄來儲存目前作為複製來源的範圍內容。
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 傳回值之外,許多方法都包含 out 參數,這些參數是用來傳回值的指標。 針對所有介面,您應該檢查所有指標參數,以確保它們在使用之前是非零的。 如果您將 null 值傳遞至需要有效指標的方法,此方法會傳回E_INVALIDARG。 忽略具有 Null 值的選擇性 out 指標。
使用方法搭配 Get 和 Set 前綴來取得和設定屬性。 布爾值變數使用 tomFalse (0) 代表 假,並將 tomTrue (-1) 用於 真。
TOM 常數定義於 tomConstants 列舉類型中,並以前綴 tom開頭,例如 tomWord。
tomBool 類型
許多 TOM 方法會針對具有二進位狀態的 RTF 屬性使用稱為 「tomBool」 的特殊變數類型。 tomBool 類型與 布爾值 類型不同,因為它可能需要四個值:tomTrue、tomFalse、tomToggle和 tomUndefined。 tomTrue 和 tomFalse 的值表示真假。 tomToggle 值可用來切換屬性。 tomUndefined 值,傳統上稱為 NINCH,是一種特殊的無輸入、無變更值,適用於長整數、浮點數和 COLORREF。 對於字串,tomUndefined (或 NINCH) 是以 null 字串表示。 針對屬性設定作業,使用 tomUndefined 並不會變更目標屬性。 對於屬性取得作業,tomUndefined 表示範圍中的字元有不同的值(它會在屬性對話框中顯示灰色的複選框)。
數學累積和降低
您可以使用 ITextRange2::BuildUpMath 方法,將線性格式化的數學表達式轉換成內建版本。 ITextRange2::Linearize 方法會執行相反的轉換,稱為線性化或降構,以將建構版本的數學表達式重新轉換為線性格式。 當您需要匯出純文本或啟用特定類型的編輯時,數學建置功能很有用。
TOM RTF
在 TOM 中,可以透過一組明確的方法呼叫或透過使用 RTF 格式來傳輸富文本,從而完成富文本交換。 本節提供段落屬性和字元屬性的 RTF 控制件字表。
TOM RTF 段落控制詞
控制字 | 意義 |
---|---|
\ fi n | 第一行縮排(預設值為零)。 |
\保持 | 保留段落不變。 |
\ keepn | 請保留下一個段落。 |
\ li n | 左縮排(預設值為零)。 |
\ noline | 沒有行號。 |
\ nowidctlpar | 關閉寡婦/孤兒控制。 |
\ pagebb | 在段落前分頁。 |
\㩱 | 新段落。 |
\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 字元格式控制詞
控制字 | 意義 |
---|---|
\ 動畫 n | 將動畫類型設定為 n。 |
\ b | 大膽。 |
\帽子 | 所有字母大寫。 |
\ cf n | 前景色彩(預設值為 tomAutocolor )。 |
\ cs n | 字元樣式 n。 |
\ dn n | 下標位置以半點為單位(預設值為 6)。 |
\ embo | 浮雕。 |
\ f n | 字型編號,和 指的是字型表中的一項。 |
\ fs n | 字型大小以半點為單位(預設值為24)。 |
\ highlight n | 背景色彩(預設值為 tomAutocolor )。 |
\i | 斜體 |
\ impr | 印記。 |
\ lang n | 將語言套用至字元。 n 是對應於語言的一個數字。 \ plain 控制字會將語言屬性重設為檔案屬性中由 \ deflang n 定義的語言。 |
\ nosupersub | 關閉上標或下標。 |
\ outl | 大綱。 |
\樸素 | 將字元格式設定屬性重設為應用程式所定義的預設值。 相關聯的字元格式設定屬性(如 RTF 規格中的關聯字元屬性一節所述)也會重設。 |
\ scaps | 小資本。 |
\西鯡 | 影子。 |
\打 | 刪除線。 |
\子 | 會根據字型資訊,套用下標至文字,並縮小字型大小。 |
超級 | 將上標套用至文字,並根據字型信息減少點大小。 |
\ ul | 連續底線。 \ ul0 會關閉所有底線。 |
如果上下文中“uld”是指“could”,則翻譯為“可以”。如指“should”,則翻譯為“應該”。 | 虛線底線。 |
\ uldb | 雙底線。 |
\ ulnone | 停止所有底線。 |
\ ulw | 文字底線。 |
\ up 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 螢幕位置。
由於UI型輔助功能程式通常會與螢幕和滑鼠搭配使用,因此常見的考慮是尋找目前滑鼠位置的對應 ITextDocument 介面(在螢幕座標中)。 下列各節提供兩種方式來判斷適當的介面:
- 透過執行中的物件數據表
- 透過適用於窗口豐富編輯實例的 EM_GETOLEINTERFACE 訊息,前提是客戶端位於相同的進程空間中(不需要 封送處理)
如需詳細資訊,請參閱 Microsoft Active Accessibility 規格。 從螢幕位置取得對象之後,您可以使用 ITextDocument 介面,並呼叫 RangeFromPoint 方法,以取得與螢幕位置相對應之 cp 的空白範圍物件。
來自執行中對象數據表的介面
執行中的物件數據表 (ROT) 會指出哪些物件實例為使用中。 藉由查詢此資料表,您可以在物件已經在執行時,加速將客戶端連接到物件。 在程式可以透過執行中的對象數據表存取 TOM 介面之前,具有視窗的 TOM 實例必須使用 Moniker 在 ROT 中註冊。 您可以從字串建構Moniker,其中包含其 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 訊息是豐富的編輯特定訊息,並且會傳回 lParam所尋址變數中 IRichEditOle 介面的指標。
提示 如果傳回指標(請務必設定 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 | 將文字範圍捲動到顯示中。 |
SetPoint | 選取直到指定點的文字。 |
字符匹配集合
ITextRange中各種 Move* 方法的 variant 參數,例如 MoveWhile 和 MoveUntil,可以使用明確的字串或字符比對集的32位索引。 索引是由 Unicode 範圍或 GetStringTypeEx 字元集所定義。 起始於 n 並且長度為 l (< 32768)的 Unicode 範圍可以由以下索引給出: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 類型支援 Unicode 文字的適當版面配置。 指派方向屬性,讓 Unicode 標準化的雙向配置演算法產生精確的結果。 這些類型互斥。 如需使用這些屬性的詳細資訊,請參閱 Unicode 標準:全球字元編碼,第 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 類型被設計用來作為一般文本處理或標準 C 函式庫所需 POSIX 類型擴充的佔位符。
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 | 阿拉伯文 Kashida 字元。 |
C3_ALPHA | 0x8000 | 所有語言字元(字母、音節文字和表意文字)。 |
C3_不適用 | 0x0 | 不適用。 |
編輯開發套件 (EDK) 可以包含 pVar 索引定義,適用於 Unicode 標準中描述的以下範圍。
字元集 | 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 | 希伯來語 | 0x590— 0x5ff |
基礎希伯來語 | 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 |
光學字符識別 | 0x2440— 0x245f | EnclAlphaNum | 0x2460 — x24ff |
框線繪製 | 0x2500— 0x257f | BlockElement (區塊元素) | 0x2580— 0x259f |
GeometShapes | 0x25a0— 0x25ff | 雜項符號 | 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 | 私人用途 | 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 |