#?SuikaWiki/0.9
[1] 『Unicode in XML and other Markup Languages』
という [[W3C]] [[Note]]
/ [[UTR]] #20
は、[[マーク付け言語]]で使うべきではない[[文字]]などを解説しています。
マーク付け言語としては主として [[XML]]、
ある程度は [[HTML]] を対象としています。
[[#comment]]
* マーク付け言語で不適切な文字
[2] 次の文字はマーク付け言語と一緒に使用するのは不適当です。
行分離子 [CODE(char)[[[LS]]]], 段落分離子 [CODE(char)[[[PS]]]], バイト順印 [CODE(char)[[[BOM]]]]
を除いては、 [[UA]] は無視するのもよし。
適当なマークに変換するのは[[著述工具]]の責任だそうです。
,[[符号位置]],[[名前]],HTML での代替,メモ
,[CODE(char)[[[U+2028]]]],[CODE(char)[[[LINE SEPARATOR]]]],[CODE(HTMLe)[[[br]]]],>>4
,[CODE(char)[[[U+2029]]]],[CODE(char)[[[PARAGRAPH SEPARATOR]]]],[CODE(HTMLe)[[[p]]]],>.4
,[CODE(char)[[[U+202A]]]],[CODE(char)[[[LEFT-TO-RIGHT EMBEDDING]]]],[CODE(HTML)[[CODE(HTMLa)[[[dir]]]]=[[ltr]]]],>>3
,[CODE(char)[[[U+202B]]]],[CODE(char)[[[RIGHT-TO-LEFT EMBEDDING]]]],[CODE(HTML)[[CODE(HTMLa)[dir]]=[[rtl]]]],>>3
,[CODE(char)[[[U+202C]]]],[CODE(char)[[[POP DIRECTIONAL FORMATTING]]]],[CODE(HTML)[[CODE(HTMLe)[[[bdo]]]]>]],>>3
,[CODE(char)[[[U+202D]]]],[CODE(char)[[[LEFT-TO-RIGHT OVERRIDE]]]],[CODE(HTML)[<[CODE(HTMLe)[bdo]] [CODE(HTMLa)[dir]]=ltr>]],>>3
,[CODE(char)[[[U+202E]]]],[CODE(char)[[[RIGHT-TO-LEFT-OVERRIDE]]]],[CODE(HTML)[<[CODE(HTMLe)[[[bdo]]]] [CODE(HTMLa)[dir]]=rtl>]],>>3
,[CODE(char)[[[U+206A]]]],[CODE(char)[[[INHIBIT SYMMETRIC SWAPPING]]]],,Unicode で非推奨 >>5
,[CODE(char)[[[U+206B]]]],[CODE(char)[[[ACTIVATE SYMMETRIC SWAPPING]]]],,Unicode で非推奨 >>5
,[CODE(char)[[[U+206C]]]],[CODE(char)[[[INHIBIT ARABIC FORM SHAPING]]]],,Unicode で非推奨 >>5
,[CODE(char)[[[U+206D]]]],[CODE(char)[[[ACTIVATE ARABIC FORM SHAPING]]]],,Unicode で非推奨 >>5
,[CODE(char)[[[U+206E]]]],[CODE(char)[[[NATIONAL DIGIT SHAPES]]]],[CODE(char)[[[U+0660]]]]〜[CODE(char)[[[U+0669]]]],Unicode で非推奨 >>5
,[CODE(char)[[[U+206F]]]],[CODE(char)[[[NOMINAL DIGIT SHAPES]]]],[CODE(char)[[[U+0030]]]]〜[CODE(char)[[[U+0039]]]],Unicode で非推奨 >>5
,[CODE(char)[[[U+FEFF]]]],[CODE(char)[[[ZERO WIDTH NO-BREAK SPACE]]]],[CODE(char)[[[U+2060]]]],Unicode で非推奨 >>6
,[CODE(char)[[[U+FFF9]]]],[CODE(char)[[[INTERLINEAR ANNOTATION ANCHOR]]]],[CODE(HTML)[<[CODE(HTMLe)[[[ruby]]]]><[CODE(HTMLe)[[[rb]]]]>]],>>7
,[CODE(char)[[[U+FFFA]]]],[CODE(char)[[[INTERLINEAR ANNOTATION SEPARATOR]]]],[CODE(HTML)[[CODE(HTMLe)[rb]]><[CODE(HTMLe)[[[rt]]]]>]],>>7
,[CODE(char)[[[U+FFFB]]]],[CODE(char)[[[INTERLINEAR ANNOTATION TERMINATOR]]]],[CODE(HTML)[[CODE(HTMLe)[rt]]>[CODE(HTMLe)[ruby]]>]],>7
,[CODE(char)[[[U+FFFC]]]],[CODE(char)[[[OBJECT REPLACEMENT CHARACTER]]]],[CODE(HTMLe)[[[object]]]] など,>>8
,[CODE(char)[[[U+1D173]]]]〜[CODE(char)[[[U+1D17A]]]],"[[タイ]], [[スラー]]など",,>>9
,[CODE(char)[[[U+E0000]]]]〜[CODE(char)[[[U+E007F]]]],[CODE(char)[Tags]],"[CODE(XML)[[[xml]]:[[lang]]]], [CODE(HTMLa)[lang]]",>>9
参考:
[4] [CODE(char)[[[LS]]]] と [CODE(char)[[[PS]]]] は、
ブラウザは[[空白]]とし、編集時は適当なマークに置き換えるのが適切です。
[3] [[BIDI]] 系は [Q[Strongly discouraged in [HTML 4.0] ]]
などと書かれていますが、 HTML 4 が激しく非推奨しているように読めて紛らわしい。
( にはそんなことは書かれていません。)
で、
HTML 4 は文字コードによる[[書字方向]]指定と
HTML のマークによる指定のいずれかだけを使うように求めているが、
文字コードによる指定は処理が複雑になってよくないのでマークを使えと言っています。
ブラウザは無視し、編集時はマークに変換するのがいいそうです。
[5] [[DIS10646]] の遺産。ブラウザは無視したらよく、
編集時は警告でもして削除するのがよいですが、
適当に変換してもいいでしょう。ということです。
[6] [CODE(char)[U+FEFF]] は、 [CODE(char)[ZERO WIDTH NO-BREAK SPACE]] と [CODE(char)[[[BYTE ORDER MARK]]]]
の二つの機能を一つの符号位置に押し込んで、
あとから都合が悪くなったので [CODE(char)[[[ZWNBSP]]]]
の機能を [CODE(char)[U+2026]] [CODE(char)[WORD JOINER]]
として分離したという恥ずかしい前歴があります。
従って今では [CODE(char)[U+FEFF]] を
[CODE(char)[ZWNBSP]] として使用することは Unicode
が非推奨としています。
ブラウザは文中の [CODE(char)[U+FEFF]] は
[CODE(char)[ZWNBSP]] として扱い、編集時は
[CODE(char)[[[ZWJ]]]] に置き換えてしまう[[及び/又は]]警告を発してよいとされています。
[7] Unicode に通称 ruby tag が入った経緯は
でも見てください。阿呆らしい。
ブラウザは無視してかまいません。
編集時は次のひとつ以上の動作を取ってかまいません。
- [CODE(char)[U+FFF9]] および [CODE(char)[U+FFFA]]〜[CODE(char)[U+FFFB]] の部分を削除
- [CODE(char)[U+FFF9]] を削除、
[CODE(char)[U+FFFA]] と [CODE(char)[U+FFFB]] をそれぞれ
[CODE(char)[ [ ]] と [CODE(char)[ ] ]] に置換
- 適当なマークに置換
(ブラウザも完全に無視したら駄目だと思うのだけどなあ。
[CODE(HTMLe)[rt]] 部分を削除しないと。)
[8] ブラウザは無視してかまいません。
編集時は適当なマークに置換可能ならそうしてもいいし、
警告を出せるなら出して、削除してしまってかまいません。
[9] ブラウザは無視してかまいません。
編集時には削除しても適当なマークに置換してもかまいません。
[[#comment]]
* マーク付け言語で適当な書式文字
[10]
がマーク付け言語で使うのは適切だと言っている文字と、
その説明をどうぞ:
,符号位置,名前,メモ
,[CODE(char)[[[U+00A0]]]],[CODE(char)[[[NO-BREAK SPACE]]]]
,[CODE(char)[[[U+00AD]]]],[CODE(char)[[[SOFT HYPHEN]]]]
,[CODE(char)[[[U+034F]]]],[CODE(char)[[[COMBINING GRAPHEME JOINER]]]],>>11
,[CODE(char)[[[U+0600]]]],[CODE(char)[[[ARABIC NUMBER SIGN]]]]
,[CODE(char)[[[U+0601]]]],[CODE(char)[[[ARABIC SIGN SANAH]]]]
,[CODE(char)[[[U+0602]]]],[CODE(char)[[[ARABIC FOOTNOTE MARKER]]]]
,[CODE(char)[[[U+0603]]]],[CODE(char)[[[ARABIC SIGN SAFHA]]]]
,[CODE(char)[[[U+06DD]]]],[CODE(char)[[[ARABIC END OF AYAH]]]]
,[CODE(char)[[[U+070C]]]],[CODE(char)[[[SYRIAC HARKLEAN METOBELUS]]]]
,[CODE(char)[[[U+0F0C]]]],[CODE(char)[[[TIBETAN MARK DELIMITER TSHEG BSTAR]]]]
,[CODE(char)[[[U+180B]]]],[CODE(char)[[[MONGOLIAN FREE VARIATION SELECTOR ONE]]]]
,[CODE(char)[[[U+180C]]]],[CODE(char)[[[MONGOLIAN FREE VARIATION SELECTOR TWO]]]]
,[CODE(char)[[[U+180D]]]],[CODE(char)[[[MONGOLIAN FREE VARIATION SELECTOR THREE]]]]
,[CODE(char)[[[U+180E]]]],[CODE(char)[[[MONGOLIAN VOWEL SEPARATOR]]]]
,[CODE(char)[[[U+200C]]]],[CODE(char)[[[ZERO WIDTH NON-JOINER]]]]
,[CODE(char)[[[U+200D]]]],[CODE(char)[[[ZERO WIDTH JOINER]]]]
,[CODE(char)[[[U+200E]]]],[CODE(char)[[[LEFT-TO-RIGHT MARK]]]]
,[CODE(char)[[[U+200F]]]],[CODE(char)[[[RIGHT-TO-LEFT MARK]]]]
,[CODE(char)[[[U+2011]]]],[CODE(char)[[[NON-BREAKING HYPHEN]]]]
,[CODE(char)[[[U+202F]]]],[CODE(char)[[[NARROW NO-BREAK SPACE]]]]
,[CODE(char)[[[U+2044]]]],[CODE(char)[[[FRACTION SLASH]]]]
,[CODE(char)[[[U+2060]]]],[CODE(char)[[[WORD JOINER]]]]
,[CODE(char)[[[U+2061]]]],[CODE(char)[[[FUNCTION APPLICATION]]]]
,[CODE(char)[[[U+2062]]]],[CODE(char)[[[INVISIBLE TIMES]]]]
,[CODE(char)[[[U+2063]]]],[CODE(char)[[[INVISIBLE SEPARATOR]]]]
,[CODE(char)[[[U+2FF0]]]]〜[CODE(char)[[[U+2FFB]]]],Ideographic Description Characters
,[CODE(char)[[[U+303E]]]],[CODE(char)[[[IDEOGRAPHIC VARIATION INDICATOR]]]]
,"[CODE(char)[[[U+FE00]]]]〜[CODE(char)[[[U+FE0F]]]], [CODE(char)[[[U+E0100]]]]〜[CODE(char)[[[U+E01DF]]]]",Variation Selectors
[11]
では [Q[Combining Grapheme Joiner]]
が [CODE(char)[[[U+0363]]]] になっていますが、
[CODE(char)[U+0363]] は [CODE(char)[[[COMBINING LATIN SMALL LETTER A]]]] だったりします。
[12] ここに挙がっている文字は、大体は、純粋(謎)な文字としての表現と書式 (極端に言えば飾り) との区別が難しい表現を実現するためのものです。
[[ハイフン付け]]関係などは本来マーク + スタイル言語で実現するべきだとは思いますが、
スタイル言語の規格および実装が完成していない現状ではマーク付け言語で使っても仕方がないでしょう。
(といっても文字としても実装されている例はさほどないのだけど。)
ただし、 [CODE(char)[FRACTION SLASH]] などは、
[[MathML]] で実現できると書いているくらいですから、
不適当に分類するべきではないですか。
[[#comment]]
* 互換写像を持つ文字
[13] [[互換写像]]を持つ文字を含む文章をマークするときの処遇が
に書かれています。
互換写像を持つ文字には、丸付き文字、片仮名の組み文字、
全角文字、半角文字などが含まれます。
いずれも、本来は組版の機能により実現されるべきものですが、
文字コードの闇歴史で次々と実用化(wされてきました
(そして Unicode はそれを貪欲に取込んでいます)。
互換写像を持つ文字は、一般には機械的にマークに置き換えることはできません。
([[不思議マーク付け]]を機械的に [[Strict]] 化できないのと同じ理由。)
はどれは機械的に変換できて、どれはとりあえず残すべきかをまとめています。
互換写像を持つ文字は、マーク付けとスタイル指定で置き換えることができます。
ただし、 [[CSS]] ですべてを表現できるわけではありません。
たとえば丸付きは CSS では実現できません。
組み文字のように CSS 3 で実現しそうなものもあります。
[[#comment]]
** 表現情報付きの文字
[14]
によれば、「斜体の [Q[hello]]」はマークで実現するべきだが、
プランク定数 (斜体の [Q[h]]) は [CODE(char)[[[U+210E]]]]
を使うべきだと言っています。
[15] しかし >>14 のようなやり方には批判的な意見もあります。
文字コードが深い意味まで介入した結果が
[CODE(char)[U+1D400]]〜[CODE(char)[U+1D7FF]]
([Q[Mathematical Alphanumeric Symbols]]) です。
(数式では普通の [Q[a]] と太字の [Q[a]] と 斜体の
[Q[a]] と・・・は意味が違うかもしれないから云々の結果、
数学用と称して太字だの斜体だの sans serif だの、
沢山の [Q[a]] が符号化されています。)
[[#comment]]
* 非文字
[16] [[非文字]]符号位置は、応用が内部で使ってもかまいませんが、情報交換に用いるべきではありません。
[[XML1.1]] では非文字は除外されていますが、
[[XML1.0]] は制定時期の関係から多くの非文字は除外されていません。
[[#comment]]
* メモ