テキスト オブジェクト モデルについて

テキスト オブジェクト モデル (TOM) は、リッチ エディット コントロールなど、いくつかの Microsoft テキスト ソリューションによってさまざまな程度でサポートされるテキスト操作インターフェイスのセットを定義します。 このトピックは、TOMの概要を示しています。 それは、次のトピックを検討します。

TOM バージョン 2 オブジェクト

TOM バージョン 2 (TOM 2) は、元のテキスト オブジェクト モデルを拡張します。新しいインターフェイスは古いインターフェイスから派生します。 更新された TOM API には、新しい文字と段落の書式プロパティ、テーブル モデル、複数選択、数学と Ruby のインライン オブジェクトのサポートが含まれています。

最上位レベルの TOM2 オブジェクトは、オブジェクト階層の下位にあるオブジェクトを作成および取得するためのメソッドを持つ ITextDocument2 インターフェイスによって定義されます。 単純なプレーンテキスト処理の場合は、 ITextDocument2 オブジェクトから ITextRange2 オブジェクトを取得し、それを使用してほとんどの処理を行うことができます。 リッチ テキストの書式設定を追加する必要がある場合は、 ITextRange2 オブジェクトから ITextFont2 オブジェクトと ITextPara2 オブジェクトを取得できます。 ITextFont2 は、Microsoft Word の書式フォント ダイアログと同等のプログラミングを提供し、 ITextPara2 は Word の書式段落ダイアログと同等の機能を提供します。

これら 3 つの下位レベルのオブジェクトに加えて、TOM 2 には選択オブジェクト (ITextSelection2) があります。これは、選択の強調表示と一部の UI 指向メソッドを持つ ITextRange2 オブジェクトです。

範囲オブジェクトと選択オブジェクトには、画面上のテキストまたは画面にスクロールできるテキストをプログラムで調べることができる画面指向のメソッドが含まれます。 これらの機能は、視覚障害のあるユーザーがテキストにアクセスできるようにするのに役立ちます。

2 サフィックスを持つ各インターフェイスは、2 つのサフィックスを持たない対応するインターフェイスから継承されます。 たとえば、 ITextDocument2ITextDocument から継承します。

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 オブジェクトは、 ストーリー と呼ばれる 1 つ以上の連続したテキスト範囲を表します。 ストーリーは、ドキュメントのメインテキスト、ヘッダーとフッター、脚注、注釈、リッチ テキスト スクラッチ パッドなど、ドキュメントのさまざまな部分を表します。 スクラッチ パッド ストーリーは、線形形式の数式と組み込みフォームの間で翻訳するときに使用されます。 スクラッチ パッド ストーリーは、コンテンツが変更される現在のコピー ソースである範囲の内容を保存するときにも使用されます。

ITextRange2 オブジェクトは、開始位置と終了位置のオフセットとストーリー オブジェクトによって定義されます。 テキストはクリップボードまたは他のターゲットにコピーできますが、親ストーリー オブジェクトとは独立して存在しません。 テキスト範囲オブジェクトは、他の種類のオフセットによって定義されるスプレッドシートや他の範囲オブジェクトとは異なります。たとえば、行/列やグラフィックスの位置 (x、y) などです。 テキスト範囲オブジェクトは、さまざまな方法で自身を変更し、それ自体の複製を返すことができます。また、開始位置と終了文字位置、および現在の選択範囲へのストーリー ポインターをコピーするようにコマンドを実行できます。

ITextRange オブジェクトは常に特定のストーリーを表すために作成できるため、明示的なストーリー オブジェクトは必要ありません。 特に、 ITextDocument オブジェクトは、 ITextStoryRanges オブジェクトを生成し、完全なストーリーを記述する開始文字位置と終了文字位置の値 (0 や tomForwardなど) の範囲で、ドキュメント内のストーリーを列挙することができます。

ITextStoryRanges2 オブジェクトでは、各ストーリーは ITextRange2 オブジェクトによって記述されるため、明示的なストーリー オブジェクトは必要ありません。 特に、 ITextDocument2 オブジェクトは、 ITextStoryRanges2 オブジェクトを生成して、完全なストーリーを記述する開始文字位置と終了文字位置の値 (0 や tomForwardなど) の範囲で、ドキュメント内のストーリーを列挙することができます。

ITextRange::Move メソッドおよび ITextRange::Expand メソッドと共に ITextRow インターフェイスを使用すると、テーブルの挿入、クエリ、変更を行うことができます。

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 パラメーターが含まれています。 すべてのインターフェイスについて、すべてのポインター パラメーターをチェックして、それらを使用する前に 0 以外であることを確認する必要があります。 有効なポインターを必要とするメソッドに null 値を渡すと、メソッドはE_INVALIDARGを返します。 null 値を持つ省略可能な out ポインターは無視されます。

Get プレフィックスと Set プレフィックスを持つメソッドを使用して、プロパティを取得および設定します。 ブール変数は、 FALSE の場合は tomFalse (0)、 TRUE の場合は tomTrue (-1) を使用します。

TOM定数は、 tomConstants 列挙型で定義され、プレフィックス tom (例: tomWord) で始まります。

tomBool 型

多くの TOM メソッドでは、バイナリ状態のリッチ テキスト属性に "tomBool" という特殊な型の変数が使用されています。 tomBool 型は、 tomTruetomFalsetomToggletomUndefinedの 4 つの値を受け取ることができるため、 ブール 型とは異なります。 tomTrue 値と tomFalse 値は true と false を示します。 tomToggle 値は、プロパティの切り替えに使用されます。 従来 NINCH と呼ばれる tomUndefined 値は、longs、floats、 COLORREFで動作する特別な入力なし、変更なし値です。 文字列の場合、 tomUndefined (または NINCH) は null 文字列で表されます。 プロパティ設定操作の場合、 tomUndefined を使用してもターゲット プロパティは変更されません。 プロパティ取得操作の場合、 tomUndefined は、範囲内の文字の値が異なることを意味します (プロパティ ダイアログ ボックスの灰色のチェック ボックスが表示されます)。

数値演算のビルドアップとビルドダウン

ITextRange2::BuildUpMath メソッドを使用すると、線形形式の数式を組み込みバージョンに変換できます。 ITextRange2::Linearize メソッドは、線形化またはビルドダウンと呼ばれる逆の変換を実行して、組み込みバージョンの数式を線形形式に変換します。 数式のビルド ダウン機能は、プレーン テキストをエクスポートする必要がある場合や、特定の種類の編集を有効にする必要がある場合に便利です。

TOM RTF

TOM では、リッチ テキスト交換は、明示的なメソッド呼び出しのセットまたはリッチ テキスト形式 (RTF) でのリッチ テキストの転送によって実現できます。 このセクションでは、段落プロパティと文字プロパティの RTF コントロール ワードの表を示します。

TOM RTF 段落コントロールワード

制御語 意味
\ fi n 1 行目のインデント (既定値は 0)。
\ keep 段落をそのまま保持します。
\ keepn 次の段落に進んでください。
\ li n 左インデント (既定値は 0)。
\ noline 行番号の表示なし
\ nowidctlpar ウィドウ/オーファンコントロールをオフにします。
\ pagebb 段落の前に改ページします。
\ par 新しい段落。
\ pard 既定の段落プロパティにリセットします。
\ ql 左揃え (既定値)。
\ qr 右揃え。
\ qj 正当化。
\ qc 中央揃え。
\ ri n 右インデント (既定値は 0)。
\ s n スタイル n.
\ sa n 後のスペース (既定値は 0)。
\ sb n 前のスペース (既定値は 0)。
\ sl n 存在しない場合、または n=1000 の場合、行間は行の最も高い文字 (1行の間隔) によって決定されます。 n> が 0 の場合、少なくとも、このサイズが使用されます。 n が < 0 の場合、正確に |n| が使用されます。 \ slmult 1 が続く場合、行間は複数行の間隔になります。
\ slmult m \ sl に従います。 m = 0: \ sl n で説明されているように、少なくとも行間または正確な行間。 m = 1: 行間 = n/240 回の単一行間隔。
\ tb n 左余白からのバー タブの位置 (twip 単位)。
\ tldot タブ リーダーのドット。
\ tleq タブリーダーの等号
\ tlhyph タブ リーダーハイフン。
\ tlth タブ リーダーの太線。
\ tlul タブ リーダーの下線。
\ tqc 中央揃えタブ。
\ tqdec [10 進] タブ。
\ tqr 右揃えタブ。
\ tx n 左余白からのタブの位置 (twip 単位)。

 

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 は言語に対応する数値です。 \ プレーンコントロールワードは、言語プロパティをドキュメントプロパティの\deflang n で定義された言語にリセットします。
\ nosupersub 上付き文字または下付き文字をオフにします。
\ outl 枠線。
\ plain 文字書式プロパティを、アプリケーションによって定義された既定値にリセットします。 関連する文字書式プロパティ (RTF 仕様の「関連文字プロパティ」セクションで説明) もリセットされます。
\ scaps スモールキャピタル
\ shad シャドウ。
\ strike 取り消し線。
\ sub テキストに下付き文字を適用し、フォント情報に従ってポイント サイズを小さくします。
\ super テキストに上付き文字を適用し、フォント情報に従ってポイント サイズを小さくします。
\ ul 連続下線。 \ ul0 では、すべての下線がオフになります。
\ uld 鎖線の下線
\ uldb 二重下線。
\ ulnone すべての下線を停止します。
\ ulw Word の下線。
\ up n 半角の上付き位置 (既定値は 6)。
\v 非表示のテキスト。

 

リッチ テキストの検索

TOM メソッドを使用すると、テキストの範囲で定義されているリッチ テキストを検索できます。 このようなリッチ テキストを正確に見つけることは、ワープロで必要になることがよくありますが、"表示される内容は何を得る" (WYSIWYG) ワード プロセッサで満たされたことはありません。 一部の文字書式設定プロパティを無視 (または段落の書式設定やオブジェクト コンテンツを含める) を可能にするリッチ テキスト 照合のメインは明らかに大きくなりますが、このような一般化は、このセクションの範囲外です。

この機能の 1 つの目的は、リッチ テキスト 検索 ダイアログ ボックスを使用して、ドキュメント内で検索するリッチ テキストを定義することです。 ダイアログ ボックスは豊富な編集コントロールを使用して実装され、TOM メソッドを使用してドキュメントを検索します。 文書から目的のリッチ テキストを 検索 ダイアログ ボックスにコピーするか、 検索 ダイアログ ボックスで直接入力して書式設定することができます。

次の例は、TOM メソッドを使用して、正確な文字書式の組み合わせを含むテキストを検索する方法を示しています。 このアルゴリズムでは、一致範囲のプレーン テキストが検索されます。これには pr1という名前が付けられています 。 プレーンテキストが見つかった場合は、評価版の範囲によって指されます。これは pr2という名前が付けられています 。 次に、2 つの挿入ポイント範囲 (prip1 および prip2) を使用して、その文字の書式設定と > の pr1文字書式を比較する試用範囲を確認します。 それらが正確に一致する場合、 pprで与えられる入力範囲が評価版範囲のテキストを指すように更新され、関数は一致した範囲内の文字数を返します。 2 つの 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 では、 ITextSelection インターフェイスと ITextRange インターフェイスを介したアクセシビリティ サポートが提供されます。 このセクションでは、アクセシビリティに役立つメソッドと、プログラムがオブジェクトの xy 画面の位置を決定する方法について説明します。

UI ベースのアクセシビリティ プログラムは通常、画面とマウスで動作するため、一般的な懸念事項は、現在のマウス位置 (画面座標) に対応する ITextDocument インターフェイスを見つけることです。 次のセクションでは、適切なインターフェイスを決定する 2 つの方法について説明します。

詳細については、Microsoft Active Accessibility 仕様を参照してください。 画面位置からオブジェクトを取得した後、 ITextDocument インターフェイスに使用し、 RangeFromPoint メソッドを呼び出して、画面の位置に対応する cp で空の範囲オブジェクトを取得できます。

実行中のオブジェクト テーブルからのインターフェイス

実行中のオブジェクト テーブル (ROT) は、アクティブなオブジェクト インスタンスを示します。 このテーブルに対してクエリを実行すると、オブジェクトが既に実行されているときに、クライアントをオブジェクトに接続するプロセスを高速化できます。 実行中のオブジェクト テーブルを介してプログラムから TOM インターフェイスにアクセスするには、ウィンドウがある TOM インスタンスをモニカーを使用して ROT に登録する必要があります。 モニカーは、その HWND の 16 進値を含む文字列から構築します。 次のコードサンプルは、これを行う方法を示しています。

// 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 メソッドは、関心のある場所に到着したときに実行できる操作を強化します。 次の表では、最も便利なメソッドを説明します。

Method アクセシビリティを向上させる方法
GetSelection このメソッドは、テキストの強調表示やスクロールなど、さまざまなビュー指向の目的で使用できるアクティブな選択を取得します。
RangeFromPoint アクティブな選択範囲で使用する場合、このメソッドは特定のビューに関連付けられた範囲を取得することが保証されます。
展開 テキスト範囲を拡大して、テキストに含まれる部分単位が完全に含まれるようにします。 たとえば、 Expand(tomWindow) は範囲を展開して、範囲のストーリーの表示部分を含めます。
GetDuplicate アクティブな選択範囲で使用する場合、このメソッドは特定のビューに関連付けられた範囲を取得することが保証されます。 RangeFromPoint の説明を参照してください。
GetPoint テキスト範囲内の開始位置または終了文字位置の画面座標を取得します。
ScrollIntoView テキスト範囲をスクロールして表示します。
SetPoint 指定したポイントの上または上にあるテキストを選択します。

 

文字一致セット

MoveWhileMoveUntil など、 ITextRange のさまざまな Move* メソッドの バリアント パラメーターは、明示的な文字列または文字一致セットの 32 ビット インデックスを受け取ることができます。 インデックスは、Unicode 範囲または GetStringTypeEx 文字セットによって定義されます。 n から始まり、長さ l (< 32768) の Unicode 範囲は、インデックス n + (l << 16) + 0x80000000によって指定されます。 たとえば、基本的なギリシャ文字は CR_Greek = 0x805f0370 で定義され、印刷可能な ASCII 文字は CR_ASCIIPrint = 0x805e0020 で定義されます。 さらに、 MoveWhile メソッドと MoveUntil メソッドを使用すると、 GetStringTypeEx 文字セットまたはこれらの文字セットに含まれていない文字のスパンで、一連の文字をすばやくバイパスできます。

GetStringTypeEx セットは、 Ctype1Ctype2、および Ctype3 の値で指定され、次のように定義されます。

Cset 意味
Ctype1 CT_CTYPE1型の組み合わせ。
Ctype2 + tomCType2 任意のCT_CTYPE2型。
Ctype3 + tomCType3 CT_CTYPE3型の組み合わせ。

 

具体的には、 Ctype1 は、以下の任意の組み合わせとすることができる。

Ctype1 名 Value 意味
C1_UPPER 0x0001 大文字。
C1_LOWER 0x0002 小文字。
C1_DIGIT 0x0004 10進数。
C1_SPACE 0x0008 空白文字。
C1_PUNCT 0x0010 句読点。
C1_CNTRL 0x0020 制御 文字
C1_BLANK 0x0040 空白文字。
C1_XDIGIT 0x0080 16進数
C1_ALPHA 0x0100 任意の言語文字 (英字、音節、または表意)。
C1_DEFINED 0x0200 定義された文字ですが、他のC1_* 型の 1 つではありません。

 

Ctype2 型は、Unicode テキストの適切なレイアウトをサポートします。 方向属性が割り当てられ、Unicode によって標準化された双方向レイアウト アルゴリズムによって正確な結果が生成されます。 これらの型を同時に指定することはできません。 これらの属性の使用方法の詳細については、「 Unicode 標準: ワールドワイド文字エンコード、ボリューム 1 および 2、Addison-Wesley Publishing Company: 1991、1992」を参照してください。

CType2 名前 Value 意味
[強固]。
C2_LEFTTORIGHT 0x1 左から右。
C2_RIGHTTOLEFT 0x2 右から左。
Weak:
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 名前 Value 意味
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) には、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
GreekSymbols 0x3d0 — 0x3ff キリル文字 0x400 — 0x4ff
アルメニア語 0x530 — 0x58f ヘブライ語 0x590 — 0x5ff
BasicHebrew 0x5d0 — 0x5ea HebrewXA 0x590 — 0x5cf
HebrewXB 0x5eb — 0x5ff アラビア語 0x600 — 0x6ff
BasicArabic 0x600 — 0x652 ArabicX 0x653 — 0x6ff
デヴァンガリ 0x900 — 0x97f バングラ語 (旧ベンガル語) 0x980 — 0x9ff
グルムキー 0xa00 — 0xa7f グジャラート語 0xa80 — 0xaff
オディア (旧オリヤ) 0xb00 — 0xb7f タミル語 0xb80 — 0xbff
Teluga 0xc00 — 0xc7f カンナダ語 0xc80 — 0xcff
マラヤーラム語 0xd00 — 0xd7f タイ語 0xe00 — 0xe7f
ラオス語 0xe80 — 0xeff GeorgianX 0x10a0 — 0xa0cf
BascGeorgian 0x10d0 — 0x10ff 字母 0x1100 — 0x11ff
LatinXAdd 0x1e00 — 0x1eff GreekX 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
Dingbats 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