Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[uppltotf] コードポイント(U 表記)の読取バグ #48

Closed
aminophen opened this issue Jan 29, 2018 · 4 comments
Closed

[uppltotf] コードポイント(U 表記)の読取バグ #48

aminophen opened this issue Jan 29, 2018 · 4 comments
Labels

Comments

@aminophen
Copy link
Member

aminophen commented Jan 29, 2018

#8 で入れた「U+10000 以上のコードポイントを JFM の TYPE > 0 に入れる」コードの一部に regression があることがわかりました。

(CHARSINTYPE O 1 U FF08)

のように U xxxx の後に空白文字を含めずに ) で閉じると

$ uppltotf ucodeparse.pl
This expression is out of JIS-code encoding. (line 1).
...   U FF08) 
             ...
This expression is out of JIS-code encoding. (line 1).
...( 
    CHARSINTYPE O 2...
Input file is in kanji YOKO-kumi format.

が出てしまいます。U 表記で 5 桁と 6 桁を許すようにしたコードに問題がある,という点までは心当たりがあるので,パッチはまた明日以降書きます。

@aminophen
Copy link
Member Author

pPLtoTF についても,もともと J xxxx は 4 桁固定でパースされているため,3 桁以下だと

$ ppltotf ucodeparse
This expression is out of JIS-code encoding. (line 1).
...(CHARSINTYPE O 1 J 214) 
                          ...
Illegal characters. I was expecting a jis code or character (line 1).
...( 
    CHARSINTYPE O 2...
Illegal characters. I was expecting a jis code or character (line 1).
...(C 
     HARSINTYPE O 2...
Illegal characters. I was expecting a jis code or character (line 1).
...(CH 
      ARSINTYPE O 2...

のように延々とエラーメッセージが続いてしまいました。これはあまり嬉しくないので,もう少し安全なコードにしてみました。 → bfbe64d

これに伴い,J 表記・U 表記ともに「任意桁数の 16 進数を受け付ける」という挙動に変化します(そして,受け付けたコードが JIS code または UCS code の最大値を超えていればそこでエラー)。

@aminophen
Copy link
Member Author

さらに気づきましたが,

(CHARSINTYPE O 1 U 0021)

という行を含む PL source を upPLtoTF → upTFtoPL → upPLtoTF すると

$ uppltotf utorig
$ uptftopl utorig utnew
$ uppltotf utnew
Illegal characters. I was expecting a jis code or character (line 1).
...   ! 
       ...

でエラーになります。これは多分 upPLtoTF は「直書き」の文字として和文文字しか受け付けないのに,upTFtoPL の方が

  if BYTE1(cx)<>0 then out(xchr[BYTE1(cx)]);
  if BYTE2(cx)<>0 then out(xchr[BYTE2(cx)]);
  if BYTE3(cx)<>0 then out(xchr[BYTE3(cx)]);
                       out(xchr[BYTE4(cx)]);

のルーチンで ASCII code も直に文字で吐き出してしまうためのようです。これを防ぐため,upTFtoPL に例外扱いを入れようと思います。

@aminophen
Copy link
Member Author

127 以下の文字コードは常に hex code で吐き出すようにする例外処理を 4085a02 で入れました。

@aminophen
Copy link
Member Author

#47 と一緒に r46518 でコミットしました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant