summaryrefslogtreecommitdiff
path: root/language/japanese/uptex-base/samples/jis_uni_variation.tex
blob: e464eed5fd4e0a48ea8e2da8900e205781681770 (plain)
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
\documentclass{ujarticle}
\usepackage[uplatex,noreplace]{otf}
\usepackage{color}
\oddsidemargin-15mm
\evensidemargin-15mm
\topmargin-20mm
\textheight255mm
\textwidth180mm

\font\jismin = jis at 10pt

\newcommand{\MKTx}[2]{%
 \textcolor{yellow}{\frame{\textcolor{blue}{{\jismin\kchar"#1}}}}%
 \textcolor{yellow}{\frame{\textcolor{blue}{{\kchar\jis"#1}}}}%
 {\small(#2)}
}
\newcommand{\UTFx}[1]{%
 \textcolor{yellow}{\frame{\textcolor{blue}{{\kchar\ucs"#1}}}}%
 \textcolor{yellow}{\frame{\textcolor{blue}{\UTF{#1}}}}{\small U+#1}}
\newcommand{\CIDx}[1]{%
 \textcolor{yellow}{\frame{\textcolor{blue}{\CID{#1}}}}{\small cid#1}}

\edef\bs{$\backslash$\kern0em}


\begin{document}
\begin{center}
{\large upTeX用JIS→Unicode変換に関する調査}
\end{center}

\section{variation tableの実状}
ptexencでは、JIS←Unicodeの変換の際に、JIS--Unicode間での変換表のばらつき
を吸収するための多対一変換を行うテーブルを持っている。
実用的に用いられている変換表はほぼこれでカバーできていると思う。
upTeXで、JIS→Unicodeの変換を行う場合は、
JISで書かれたファイルの入力と\bs jis, \bs kuten などのプリミティヴを
使用した場合に行われる。
この場合に、実装依存ではなく安定した変換を行いたい。
この際の対応関係を
どうすべきか検討するため、現状を調査する。

\parindent0mm
\begin{tabular}{l@{~}l|l@{~}l@{~}|l@{~}c@{~}|l}\hline
JIS & H, V & UCS2 & UniJIS-UTF16 & 実装例 & upTeX & 備考\\\hline
\MKTx{2126}{1-1-6} & \CIDx{638}
   & \UTFx{2022} & \CIDx{119} & ※ & & BULLET \\\cline{3-7}
 & & \UTFx{2219} & \CIDx{117} & ※ & & BULLET OPERATOR\\\cline{3-7}
 & & \UTFx{22C5} & 該当なし   & ※ & & DOT OPERATOR\\\cline{3-7}
 & & \UTFx{30FB} & \CIDx{638} & [g][J][W][M] & (1) & KATAKANA MIDDLE DOT\\\hline\hline

\MKTx{2131}{1-1-17} & \CIDx{649}
   & \UTFx{203E} & \CIDx{226} & [M98] & & OVERLINE\\\cline{3-7}
 & & \UTFx{FFE3} & \CIDx{649} & [g][J][W][M99] & (1) & FULLWIDTH MACRON\\\hline\hline

\MKTx{213D}{1-1-29} & \CIDx{661}
   & \UTFx{2012} & \CIDx{114} & ※ & & FIGURE DASH \\\cline{3-7}
 & & \UTFx{2013} & \CIDx{114} & ※ & & EN DASH \\\cline{3-7}
 & & \UTFx{2014} & \CIDx{138} & [J][Ja140][M] & & EM DASH  \\\cline{3-7}
 & & \UTFx{2015} & \CIDx{661} & [g][W][Ja131] & (2) & HORIZONTAL BAR \\\hline\hline

\MKTx{2141}{1-1-33} & \CIDx{665}
   & \UTFx{223C} & \CIDx{100} &  ※ & & TILDE OPERATOR \\\cline{3-7}
 & & \UTFx{223E} & 該当なし   &  ※ & & INVERTED LASY S\\\cline{3-7}
 & & \UTFx{301C} & \CIDx{665} & [J][M] & (3) &WAVE DASH  \\\cline{3-7}
 & & \UTFx{FF5E} & \CIDx{665} & [g][W] & & FULLWIDTH TILDE  \\\hline\hline

\MKTx{2142}{1-1-34} & \CIDx{666}
   & \UTFx{2016} & \CIDx{666} & [J][M] & (4) & DOUBLE VERTICAL LINE \\\cline{3-7}
 & & \UTFx{2225} & \CIDx{15489}{\small(\#)} & [g][W] & & PARALLEL TO (X0213:1-2-52)\\\hline\hline

\MKTx{2143}{1-1-35} & \CIDx{667}
   & \UTFx{2223} & 該当なし   &  ※  & & DIVIDES\\\cline{3-7}
 & & \UTFx{FF5C} & \CIDx{667} & [g][J][W][M] & (1) & FULLWIDTH VERTICAL LINE \\\hline\hline

\MKTx{2144}{1-1-36} & \CIDx{668}
   & \UTFx{2026} & \CIDx{668} & [g][J][W][M99] & (1) & HORIZONTAL ELLIPSIS  \\\cline{3-7}
 & & \UTFx{22EF} & 該当なし   & [M98]& & MIDLINE HORIZONTAL ELLIPSIS \\\hline\hline

\MKTx{215D}{1-1-61} & \CIDx{693}
   & \UTFx{2212} & \CIDx{693} & [J][M] & (3) & MINUS SIGN \\\cline{3-7}
 & & \UTFx{FF0D} & \CIDx{693} & [g][W] & & FULLWIDTH HYPHEN-MINUS \\\hline\hline

\MKTx{216F}{1-1-79} & \CIDx{711}
   & \UTFx{00A5} & \CIDx{61}  & [J] & & YEN SIGN\\\cline{3-7}
 & & \UTFx{FFE5} & \CIDx{711} & [g] (J)[W][M] & (5) & FULLWIDTH YEN SIGN\\\hline\hline

\MKTx{2171}{1-1-81} & \CIDx{713}
   & \UTFx{00A2} & \CIDx{102} & [J][M] & & CENT SIGN \\\cline{3-7}
 & & \UTFx{FFE0} & \CIDx{713} & [g][W] & (5) & FULLWIDTH CENT SIGN  \\\hline\hline

\MKTx{2172}{1-1-82} & \CIDx{714}
   & \UTFx{00A3} & \CIDx{103} & [J][M] & & POUND SIGN \\\cline{3-7}
 & & \UTFx{FFE1} & \CIDx{714} & [g][W] & (5) & FULLWIDTH POUND SIGN  \\\hline\hline

\MKTx{224C}{1-2-44} & \CIDx{751}
   & \UTFx{00AC} & \CIDx{153} & [J][M] & & NOT SIGN \\\cline{3-7}
 & & \UTFx{FFE2} & \CIDx{751} & [g][W] & (5) & FULLWIDTH NOT SIGN  \\\hline\hline

\MKTx{227E}{1-2-94} & \CIDx{779}
   & \UTFx{20DD} & \CIDx{16328}{\small(\#)} &  ※ & & COMBINING ENCLOSING CIRCLE\\\cline{3-7}
 & & \UTFx{25EF} & \CIDx{779} & [g][J][W][M] & (1) & LARGE CIRCLE\\\hline

\end{tabular}\\

\parindent1zw
\baselineskip10pt

※: 実装未確認、[J](J): JISの変換表、[W]: Windows CP932の変換表、
[M98]: Mac OSの1998年8月版までの変換表、[M99]: Mac OSのそれ以降の変換表、
[M]: Mac OSの変換表、
[Ja131]: Java, JRE1.3.1までの変換表、[Ja140]: Java, JRE1.4.0以降の変換表。
Javaの表は、EUC/Shift\_JIS/JISで微妙に異なっている。
[g]: libs/gd/jisx0208.hの変換表(ptexencでiconv不使用時に利用)。
(\#): AJ1-5。
JIS1-1-79の[J](J): JISでは、JIS X 0201ローマ字の円記号(いわゆる半角の円記号)と
区別する必要がある場合は後者、特に区別する必要がない場合は
前者ということになっているらしいが、
前者を採用している実装はかなり少数派と思われる。

参考: {\tt http://euc.jp/i18n/ucsnote.ja.html}, 
{\tt http://hp.vector.co.jp/authors/VA010341/unicode/}, \\
{\tt http://www.ingrid.org/java/i18n/unicode.html}, 
{\tt http://www.asahi-net.or.jp/~hc3j-tkg/unicode/}, \\
{\tt http://www.y-adagio.com/public/standards/tr\_xml\_jpf/kaisetsu.htm}

\vspace{3mm}
\baselineskip15pt

上記の※は主に
``http://euc.jp/i18n/ucsnote.ja.html''から採用されたものと思うが、
この表はかなり広く似た文字を拾い集めたものであって、
実装例が稀な例を含んでいる。実装例の稀なものまで考慮する必然性はない。

gdの変換表は、Windows CP932と同等と思われる。
Java, Macの変換表は
旧いものを除くと、(この表に含まれている文字の範囲では)JISと同等と
思われる。JIS X 0201ローマ字のいわゆる半角円記号(0x5c)をUnicodeの
どこに対応付けるかで若干異なっているそうだが、
pTeX/upTeXでは、JIS X 0201の半角円記号(0x5c)は
ASCIIのバックスラッシュ(0x5c)と区別することが不可能であるため、
0x5c→U+005Cの変換を採用する他ない。

以上のような状況からすると、upTeXでのJIS→Unicode変換表の影響については
[W][J]の二者を考慮しておけば問題ないと思われる。
なお、JISの変換表は、規格上では規定ではなく参考扱いであり、
この変換表に従わなくとも規格違反にはならないそうだ。


\section{upTeXでのJIS→Unicode変換表の好ましい形態}
upTeXでは、「JISで書かれたpTeX用のソースを
非常に少ない変更でupTeXでも同等にタイプセットできる」
という方針にしている。
また
「pTeXでは、min10.\{tfm,vf\}→rml.\{tfm,vf\}→CMapのH→dvipsまたは
dvipdfmx出力」
「upTeXでは、upjisr-h.\{tfm,vf\}→uprml-h.\{tfm,vf\}→CMapのUniJIS-UTF16-H→
dvipsまたはdvipdfmx出力」
を基本に考えている。
同様の最終出力を想定した場合に、文字コード→CIDのマッピングの変更は
vfや、新規のCMapの利用などでも可能であるが、
既存のCMap(HやUniJIS-UTF16-H)で出来るだけ可能にしておきたい(2)(4)(5)。

また、Windowsの変換表は文字の意味上JISやUnicodeの規定から
かけはなれた変換を行っているものがある。
組版上の副作用がない範囲内ではJISの変換表を優先させたい(3)。

また、JIS X 0213で区別されている文字は、
この対応表の結果でも区別できるようにしておきたい(4)。


\parindent0mm
\begin{tabular}{ccp{145mm}}
分類 & 実装例 & upTeXでの採用の理由\\\hline
(1) & [J][W] & 対抗の候補の実装例が稀で、考慮に値しないと思われる。\\
(2) & [W] & [J]に従うと、JIS\&HとUnicode\&UniJIS-UTF16-Hで異なる結果
 になってしまう。[W]では、JISの規定上文字の意味を変更していることに
 になってしまうが、やむを得ない。\\
(3) & [J] & CMapの結果上差異はないが、文字の意味としては[W]の変換は
 誤っていると思われる。\\
(4) & [J] & [W]に従うと、JIS\&HとUnicode\&UniJIS-UTF16-Hで異なる結果
 になる上AJ1-4外になりしかも変換の文字の意味として
 誤っていると思われる。[W]のUnicodeの値は、JIS X 0213で別字に割り当てられ
 ており整合性が悪い。\\
(5) & [W] & [J]に従うと、JIS+CMapのHとUnicode+CMapのUniJIS-UTF16-Hで異なる結果
 になってしまうが、[W]でも``FULLWIDTH''の差のみで文字の意味を変更していることにはならない。\\
(6) & [J][W] & 下記。JIS→Unicodeの変換表には揺らぎがないが、CIDとの対応では互換性が無い。
 文字コード変換部分以外 (vf, CMapなど) に別途要対策。\\\hline
\end{tabular}

\parindent1zw

結果的には、[J]でも[W]でもない変換表がupTeXにとっては好ましい。
「変換表の乱立に拍車を掛ける」という批判もあるかもしれないので、
副作用について考えてみる。
upTeX(内部Unicode動作)でJIS→Unicodeの変換をした場合、
再度Unicode→JISに変換することは、わずかな例外
(端末への出力で、端末の環境がEUCなどJIS系であった場合)のみであり、
ファイル出力などでUnicode→JIS変換が利用されることはない。
JIS→Unicode→JISのラウンドトリップは保証されている。
副作用があるとすれば、
JIS→Unicodeの変換したファイル出力(logやauxなど)を、
例えばWindowsで入出力がUTF-8だが内部がCP932で動作しているような
ソフトで編集をすると、
文字欠けなどの危険がある。
しかし、そのようなケースは稀だと思われるし、
考慮しなくていいだろう。
JIS→Unicodeの変換が安定であることのメリットの方が
大きいと判断する。

\section{upTeXでのUnicode→CID変換}
下記の例は、JIS→Unicodeの変換については疑義がなく明解だが、
CIDとの対応を含めて考えると、
「pTeXでは、min10.\{tfm,vf\}→rml.\{tfm,vf\}→CMapのH→dvipsまたは
dvipdfmx出力」
「upTeXでは、upjisr-h.\{tfm,vf\}→uprml-h.\{tfm,vf\}→CMapのUniJIS-UTF16-H→
dvipsまたはdvipdfmx出力」
という方針では対応できず、別途対策が必要。
UniJIS-UTF16-Hの代わりにUniJIS-UCS2-HでOKという話ならAdobe標準CMapの切り替えで対応可能であるが。
文字コード変換部分ではどうにもならないので、
vfかCMapの機能を使わざるを得ない。
現在、「upjisr-h.vf → JISコード\&rml.\{tfm,vf\} →CMapのH」の
対応付けを行うコースを最有力と考えている。

\parindent0mm
\begin{tabular}{l@{~}l|l@{~}l@{~}|l@{~}c@{~}|l}\hline
JIS & H, V & UCS2 & UniJIS-UTF16 & 実装例 & upTeX & 備考\\\hline
\MKTx{2148}{1-1-40} & \CIDx{672}
   & \UTFx{201C} & \CIDx{108} & [g][J][W][M] & (6) & LEFT DOUBLE QUOTATION MARK\\\cline{3-7}
 & & 該当なし & \CIDx{672} &  &  &   \\\hline\hline

\MKTx{2149}{1-1-41} & \CIDx{673}
   & \UTFx{201D} & \CIDx{122} & [g][J][M][W] & (6) & RIGHT DOUBLE QUOTATION MARK \\\cline{3-7}
 & & 該当なし & \CIDx{673} &  &  &   \\\hline
\end{tabular}

\end{document}