Asciidoctor PDFの日本語ワードラップが改善された
8/31にリリースされた v1.5.0 Beta 3 でAsciidoctor PDFの日本語ワードラップが改善されました。デフォルトでは適用されないようになっていて、 :scripts: cjk
を設定 (attribute) に追加すると有効になります。
Release v1.5.0 Beta 3のリリースノートにある
if value of scripts attribute is cjk, break lines between any two CJK characters (except punctuation) (#1206)
がワードラップの改善ですね。
- Use specialized line break strategy for Chinese and Japanese · Issue #1206 · asciidoctor/asciidoctor-pdf · GitHub
- resolves #1206 if value of scripts attribute is cjk, break lines betw… · asciidoctor/asciidoctor-pdf@4499ad8 · GitHub
対応内容はと言うと、chloerei/asciidoctor-pdf-cjk や fuka/asciidoctor-pdf-linewrap-ja と同じく、いい感じの場所に zero-width space を挿入するというアプローチになっています。
https://github.com/asciidoctor/asciidoctor-pdf/issues/1206#issuecomment-520311699 によると
- Prawnの改行ロジックにパッチを当てようと思ったけど override するのが難しすぎた
- zero-width space を挿入するアプローチは最良ではないけどシンプルなので採用した
- 将来的にはPrawn側で修正されるのがベター
ってことのようですね。自分が asciidoctor-pdf-linewrap-ja を作ったときとおんなじ結論。
zero-width space の挿入判定は
string = string.gsub %r/(?=[\u3000\u30a0-\u30ff\u3040-\u309f\p{Han}\uff00-\uffef])/, ZeroWidthSpace
となっています。
\u3000
is the ideographic space character\u30a0-\u30ff
is Hirgana (\p{Hiragana}
is incomplete)\u3040-\u309f
is Katakana\p{Han}
are the unified CJK ideographs\uff00-\uffef
are half-width and full-width CJK forms
とのこと。 asciidoctor-pdf-cjk と同じようなルールです。
今までも asciidoctor-pdf-cjk を使えばできていたことが標準でできるようになっただけ、と言えばそれまでですが、標準でできることに意味があるかなあ、と。これで少なくとも asciidoctor-pdf-cjk はお役御免かと思います。
ちょっと試した感じだと、一応 asciidoctor-pdf-linewrap-ja のほうがベターなケースは残っているみたい。せっかくなので細々とメンテ続けていこうかな。
関連(するかもしれない)記事
おススメ