/
253.txt
265 lines (215 loc) · 8.07 KB
/
253.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
* 代替
[25] ほとんど実装されていないので、使うべきではありません。
[[ルビ]]は [[HTML]] の [CODE[ruby]] [[要素]]など、
[[マーク付け言語]]などの機能によって記述するべきです。
* 仕様書
[REFS[
- [1] [CITE[[[The Unicode Standard]], Version 12.0 - ch23.pdf]] ([TIME[2019-03-02 07:15:46 +09:00]]) <https://www.unicode.org/versions/latest/ch23.pdf#G15944>
]REFS]
* 意味
[2]
[DFN[interlinear annotation]]
は、
[DFN[annotated]] [[文字]]群の列に関係付けられた
[DFN[annotating text]]
によって構成されます。
[SRC[>>1]]
[[paired stateful controls]] です。
[3]
通常の[[編集]]や[[テキスト処理]]のアルゴリズムにあっては、
[[annotated]]
[[文字]]群は[[テキストストリーム]]の一部として扱います。
[SRC[>>1]]
[8]
[[適合実装]]は、
[[annotation character]]
に[[対応]]する場合にあっては、
base text
を annotate されていない[[テキストストリーム]]の一部である場合と同様に解釈します。
[SRC[>>1]]
[7]
[[annotating text]]
も[[内容]]の一部ですが、
[[テキスト処理]]の一部または全部においては[RUBYB[主たる][main]][[テキストストリーム]]の一部を構成しません。
[SRC[>>1]]
[4]
ただし、
[[annotating text]]
中の[[文字]]は、
[RUBYB[基底テキスト][base text]]と同種の[[配置]]、
[[テキスト処理]]、
[[編集]]のアルゴリズムでアクセス可能です。
[SRC[>>1]]
[9]
[[適合実装]]は、
[[annotation character]]
に[[対応]]する場合にあっては、
[[annotating text]]
中の
annotating character
を通常の [[Unicode]] の[RUBYB[[[意味]]][semantics]]によって解釈します。
[SRC[>>1]]
[5]
[[annotation character]] は、
[[annotating text]] と
[[annotated]] text
を区切り、
これを annotation の一部として示すものです。 [SRC[>>1]]
[REFS[
- [32] 文字の一覧: [CITE@en[[[Character set]] "'''['''\uFFF9\uFFFA\uFFFB''']'''"]] ([TIME[2019-07-03 12:09:43 +09:00]]) <https://chars.suikawiki.org/set?expr=%5B%5CuFFF9%5CuFFFA%5CuFFFB%5D>
]REFS]
[10]
[DFN[[CODE(char)[U+FFF9]]]]
[DFN[[CODE(charname)@en[INTERLINEAR ANNOTATION ANCHOR]]]]
は、
[[interlinear annotation]] の前に来る anchor [[文字]]です。
[SRC[>>1]]
[11]
[DFN[[CODE(char)[U+FFFA]]]]
[DFN[[CODE(charname)@en[INTERLINEAR ANNOTATION SEPARATOR]]]]
は、
[[テキストストリーム]]中の base character 群を次の
[[annotation character]] 群から区切るものです。
[SRC[>>1]]
[12] [CODE(char)[U+FFFA]] は複数あっても構わず、
[RUBYB[複数部分][multipart]]の [[annotating text]]
の各部を区切ります。
[SRC[>>1]]
[13]
[DFN[[CODE(char)[U+FFFB]]]]
[DFN[[CODE(charname)@en[INTERLINEAR ANNOTATION TERMINATOR]]]]
は、
annotation object を終端する
(通常の[[テキストストリーム]]に復帰する) ものです。
[SRC[>>1]]
[6]
[[annotation character]] は、
[RUBYB[外部][out-of-band]]情報が[[文字ストリーム]]に関連付けられているときに内部処理で使います。
[[annotation]]
の正確な性質や[RUBYB[書式付け][formatting]]は、
[[平文ストリーム]]の一部ではない追加の情報に依存します。
これは [CODE(char)[U+FFFC]] [CODE(charname)@en[OBJECT REPLACEMENT CHARACTER]]
とよく似ていますが、
[CODE(char)[U+FFFC]]
はこの[[文字]]によって不透明なオブジェクトを隠すのに対し、
annotation の場合それ自体はテキストなのであります。
[SRC[>>1]]
;; [26] [CITE[Unicode Standard]] の規定はあやふやで用語も揺れまくっていて、
[[行間を読む]]他ない惨状です。 [[HTML]] の [CODE[ruby]]
を知っていれば、だいたい何をやりたかったのかは推測できます。
* 構文
[17]
anchor 文字は、
対応する
terminator 文字の前になければなりません。
[SRC[>>1]]
[19]
annotation
は入れ子にして構いません。
[SRC[>>1]]
[FIG(railroad)[ [27] [[interlinear annotation]]
= [CODE[U+FFF9]]
= [[annotated]]
= +
== [CODE[U+FFFA]]
== [[annotating text]]
= [CODE[U+FFFB]]
]FIG]
[29]
[[annotated]] と
[[annotating text]]
に[[改段落]]を含むことはできません (>>16)。
[[空文字列]]でも良いのかは定かではありません。
* 文脈
[28]
[[annotation character]]
は、
通常は[[末端利用者]]に直接[[入力]]、[[編集]]されません。
一般的には[[応用]]が[[テキスト]]の[[選択]]と[RUBYB[注釈付け][annotating]]の[[利用者インターフェイス]]を提示し、
挿入と管理を行うものです。
[SRC[>>1]]
[14]
[[annotation character]]
の[[平文]]における使用は、
[[送受信者間の事前の合意][当事者間の合意]]がある場合を除き、
[[内容]]が誤解されるおそれがあるため、
[RUBYB[強く非推奨][strongly discouraged]]です。
[SRC[>>1]]
[15]
[[annotation character]]
を除去するだけでは読めない結果が生成されたり、
最悪、意味が逆になってしまうかもしれません。
[[平文]]の受信者は、
入力中のすべての[[文字]]をそのまま残すか、
[[interlinear annotation character]] と [[annotating text]]
を削除するかのいずれかとするべきです。
[[平文]]の出力時に送信者が受信者を知らない場合、
[[interlinear annotation character]] と [[annotating text]]
を削除するべきです。
[SRC[>>1]]
* 処理
[16]
[[実装]]は、
anchor 文字の後、
terminator 文字の前に[[改段落]]が出現した場合、
開いている [[annotation]] を閉じなければなりません。
[SRC[>>1]]
[18]
組になっていない
anchor 文字や
terminator 文字は、
無視するべきです。
[SRC[>>1]]
[20]
anchor 文字と
terminator 文字の組の外側に出現した
separator 文字は、
無視するべきです。
[SRC[>>1]]
[30]
[[照合]]では、
annotation
を[[整列キー]]として使うことを想定する特殊な場合を除き、
無視するか、
任意選択により前処理して [[tie breaker]] としてのみ使うこととするのが普通です。
annotation base character 群は無視せず、
通常の[[テキスト]]として扱うことが重要であります。
[SRC[>>1]]
* レンダリング
[21]
[RUBYB[書式付け][formatting]]に関する情報は、
[[上位層プロトコル]]によって提供されます。
[[配置]]の詳細は[[実装定義]]です。
正確な書式付けのために必要な追加情報は[[文字ストリーム]]中に現れず、
[RUBYB[外部][out-of-band]]に示されるかもしれません。
従って annotation marker は別情報源の情報にアクセスできる実装のための
[[placeholder]]
として機能するのです。
[SRC[>>1]]
[22]
書式付けその他[[行組版]]の特殊機能については [[JIS X 4051]]
で議論されています。
[SRC[>>1]]
[23]
[CITE[Unicode Standard]] の利用例図 [SRC[>>1]]
にある通り、 [[ルビ]]として[[レンダリング][文字のレンダリング]]されることが想定されていますが、
利用方法は実装依存となっていて [CITE[Unicode Standard]]
は完全に丸投げしています。
[24]
意図通りに正しくレンダリングする実装があるのかは不明であり、
主要な実装では皆無です。外部情報が必要とされ、
具体的なことは何も定められていないのですから、
実装できるはずもありません。
[31]
[[bidi]] アルゴリズムは、
[[interlinear annotation]]
を
[[annotated text]]
に置き換えた上で各々の [[annotated text]]
が視覚的に連続するよう
[[bidirectional format control character]]
で囲んだ主たるテキストに適用するべきであり、
更にそれぞれの [[annotating text]]
に別個に適用するべきであります。
[SRC[>>1]]
* メモ