Hatena::ブログ(Diary)

アセトアミノフェンの気ままな日常

2016-05-25

\jis, \euc, \sjis, \kuten(続き)

先日のソースOS X で処理してみた。

pTeX と upTeX(および LuaTeX-ja)で比較 on OS X

ソースも再掲。表が実際の処理結果 (TeX Live 2016 pretest final, OS X self-build) 。

\ifx\directlua\undefined\else
  \input luatexja.sty
\fi
[1] \char\jis"2422    % あ
[2] \char\euc"A4A2    % あ
[3] \char\sjis"82A0   % あ
[4] \char\jis"2420    % .notdef
[5] \char\euc"A4A0    % .notdef
[6] \char\sjis"829E   % .notdef
[7] \char\sjis"829E1  % (invalid)
[8] \char\kuten"253C  % 怒
[9] \char\kuten"253C1 % (invalid)
\bye
(e-)pTeX(e-)upTeXLuaTeX-ja
[1]
[2]
[3]
[4]! Bad character code (42144).NUL (^@)NUL (^@)
[5]! Bad character code (42144).NUL (^@)NUL (^@)
[6].notdefNUL (^@)NUL (^@)
[7]! invalid character code (535009).
[8]
[9]! Bad character code (-1).NUL (^@)NUL (^@)

OS X の場合 (e-)pTeX は漢字コードは utf8.euc なので、W32TeX とはもちろん微妙に異なる。(e-)upTeX は utf8.uptex で W32TeX と同じ結果、LuaTeX-ja も W32TeX と同じ結果になった(ただし期待とは違う)。

割り当てられた文字がない場合(文字コード表でいうところの「左上角」のアキ点にあたる [4][5][6])や不正な入力をした場合(16 bit 数値であるべきところにそれより大きな値を入れた [7] や [9])は仕様が未定義なのかもしれない。LuaTeX-ja の「あ」→「ぢ」は明らかに変なので、後日調べてみようと思う。

追記 (2016-05-27):LuaTeX-ja の \sjis のバグの原因が判明。

--- ltj-compat.lua.1~	Sun May 15 03:29:22 2016
+++ ltj-compat.lua	Fri May 27 23:04:03 2016
@@ -110,7 +110,7 @@
 	if c1>0x7f then i=0x40 else i=0x3f end
 	c1 = c1 - i
      else
-	c1 = c1 - 0x7e
+	c1 = c1 - 0x9e
      end
      from_kuten(c2*256+c1)
   end

これで「あ」→「あ」と正常になるはず。というわけでとりあえず報告

北川北川 2016/11/09 21:02 > [7] \char\sjis"829E1
少なくとも e-pTeX では,\char\sjis"29E1 と同じ結果になりました.
ptexenc のソースを見る限りでは,下から2バイトしか見ていないように思えます.

acetaminophenacetaminophen 2016/11/09 21:30 全く分析せずに書き殴っただけになっていましたが…コメントありがとうございます。これは下から2バイトなのですね… これも Invalid を返してくれるといいなあと思っていたりします。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証