Skip to content

カタカナの改行位置が不正 #5

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

Closed
k-takata opened this issue Nov 24, 2016 · 5 comments
Closed

カタカナの改行位置が不正 #5

k-takata opened this issue Nov 24, 2016 · 5 comments

Comments

@k-takata
Copy link
Member

以下のファイルに対し、tw=68 に設定し、2~6行目を1行ずつ整形してみます。(github上で見ると崩れていますが…。)

----+----1----+----2----+----3----+----4----+----5----+----6----+---|7||||+
1234567890123456789012345678901フォーマット
1234567890123456789012345678901フォーマト
1234567890123456789012345678901フーマト
1234567890123456789012345678901フォマト
1234567890123456789012345678901 フォマト

実行例:

vim -N -u NONE -U NONE --cmd "set rtp^=<autofmt-dir> tw=68" --cmd "set formatexpr=autofmt#japanese#formatexpr()" test.txt

jgqq を 5 回実行。

期待値:

----+----1----+----2----+----3----+----4----+----5----+----6----+---|7||||+
1234567890123456789012345678901フォー
マット
1234567890123456789012345678901フォー
マト
1234567890123456789012345678901フーマ
ト
1234567890123456789012345678901フォマ
ト
1234567890123456789012345678901 フォ
マト

実際:

----+----1----+----2----+----3----+----4----+----5----+----6----+---|7||||+
1234567890123456789012345678901
フォーマット
1234567890123456789012345678901
フォーマト
1234567890123456789012345678901フーマ
ト
1234567890123456789012345678901フォマ
ト
1234567890123456789012345678901 
フォマト

どうも、長音記号や拗音の後で改行してくれないようです。

@k-takata
Copy link
Member Author

k-takata commented Nov 24, 2016

原因ですが、Unicode 7.0対応のときの不備ではないかと思います。
Unicode 6.1で、UAX #14が改定された際に、CJ (Conditional Japanese Starter)というプロパティーが追加されたのですが、それに対する処理が抜けているように思われます。
CJは、strictな処理の場合はNSと同様に扱い、normalな処理の場合はIDと同様に扱う文字のようです。

Treat as NS or ID for strict or normal breaking.

W3C の https://www.w3.org/TR/jlreq/ja/ によると、

3.9.2 文字・記号を振る舞い方により分ける

10. 長音記号(cl-10)
注2) JIS X 4051では,処理系定義として,長音記号[ー] (KATAKANA-HIRAGANA
PROLONGED SOUND MARK)を行頭禁則和字から除くことは認められている.

11. 小書きの仮名(cl-11)
注2) JIS X 4051では,処理系定義として,小書きの仮名(ぁぃぅァィゥなど)を行頭
禁則和字から除くことは認められている.

ということで、長音記号や拗音を、禁則処理の対象とするかどうかを選択できるようにするための処置のようです。
autofmtも、処理を選択できるようにしたほうが良いかもしれません。(現行はstrict相当のはず。)

k-takata added a commit that referenced this issue Nov 24, 2016
* Support `CJ` property which was introduced with Unicode 6.1.
* Support `autofmt_strict_japanese_linebreak` setting.
@k-takata
Copy link
Member Author

Fixed. Closing.

@koron
Copy link
Member

koron commented Nov 25, 2016

ありがとうございます!

@koron
Copy link
Member

koron commented Nov 25, 2016

対応するテストって、ありました?

@k-takata
Copy link
Member Author

test3が日本語関連のテストですが、長音記号・拗音関連のテストはなかったですね。
あと、autofmt_allow_over_tw, autofmt_allow_over_tw_char と、今回追加した autofmt_strict_japanese_linebreak 関連のテストもありません。

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

No branches or pull requests

2 participants