文字は,符号位置 と呼ぶ(スカラ値 とも呼ぶ)数によってUnicodeで表現される。これらの数は,0 〜 1,114,111 = 10FFFF16を範囲とできる。(ただし,これらの値の幾つかは,文字としては使用できない。)各々の符号位置は,32ビット符号単位で直接に符号化できる。この符号化を,UCS-4(又はUTF-32)と呼ぶ。しかし,DOM規定は,(FFFF16より小さい値をもつ)よく使う文字が,単一の16ビット符号単位によって表現される,UTF-16を使う。一方,FFFF16より大きい文字には,サロゲートペア(surrogate pair) と呼ばれる符号単位の特殊な対を使う。より詳細な情報のためには,[Unicode],又はUnicode関連のウェブサイトを参照すること。
符号単位とは対照的に符号位置によるインデクス付けは,プログラム間では共通ではないが,XPath(並びにその関係でXSLT及びXPointer)などの規定は,符号位置インデクスを使う。それらフォーマットを用いたインタフェースを使うために,プログラム言語は,符号位置インデクスを符号単位インデクスに変換したり戻したりする文字列処理の方法を提供することが望ましい。これらの関数を,本来的には提供しない言語もある。これら言語のために,DOMString
へと束縛される言語本来のString
(文字列)型は,この変換を可能にするように拡張されることが望ましい。それらAPIはどのようなものになるかという例を,B.2で示す。
String
type that is bound to DOMString
be extended to enable this conversion. An example of how such an API might look is supplied below.
備考 これらのメソッドは,要求された機能性の型の例として示されるので,メソッド,例外及びインタフェースの名前は,この附属書で示すものと異なってもよい。
言語の本来的なString
のクラス又はインタフェースに対する拡張
interface StringExtend { int findOffset16(in int offset32) raises(StringIndexOutOfBoundsException); int findOffset32(in int offset16) raises(StringIndexOutOfBoundsException); };
findOffset16
備考 UTF-32オフセットからUTF-16オフセットへは可逆変換であって,いつでも元に戻すことができる。offset16がサロゲートペアの中間にはない場合及びその場合に限り,UTF-16オフセットからUTF-32オフセットへは可逆変換であって,いつでも元に戻すことができる。対でないサロゲートは,単一のUTF-16値として数える。
int
型のoffset32
offset32
of type
int
|
UTF-16オフセット。 UTF-16 offset |
|
if
offset32 is out of bounds.
|
findOffset32
len32 = findOffset32(source, source.length());
備考 UTF-16オフセットがサロゲートペアの中間にある場合に,その対(ペア)のUTF-32オフセットの 終端 が返される。すなわち,対の終端の後の文字のインデクスが返される。UTF-32オフセットからUTF-16オフセットへは可逆変換であって,いつでも元に戻すことができる。offset16がサロゲートペアの中間にはない場合及びその場合に限り,UTF-16オフセットからUTF-32オフセットへは可逆変換であって,いつでも元に戻すことができる。対でないサロゲートは,単一のUTF-16値として数える。
int
型のoffset16
offset16
of type
int
|
UTF-32オフセット。 UTF-32 offset |
|
offset16が境界外である場合。
if offset16 is out of bounds.
|