Re: 和欧文間の空き or Segment Break Transformation Rules

On 2020/05/11, at 14:56, Koji Ishii <kojii@chromium.org> wrote:
> 
> 他の方のご意見もいただきたのですが、とりあえず二点だけ情報共有。
> 
> 2020年5月9日(土) 21:02 木田泰夫 <kida@mac.com <mailto:kida@mac.com>>:
> そもそもそうやって入力されている html は日本語の場合どのくらいあるんでしょう? 昔は問答無用で空白が入っていた時代があったので、あんまりない?
> 
> 少なくともWebにおいては、原則ないです。ほとんどの著者が、HTMLで改行すると空白が入ることを知っていて「日本語では改行しない」「 改行するならスペースを入れたい場所 」を実践しています。過去の記憶では電子書籍でも同様だと思いますが、最近の事情は他の方に。


日本語でのHTML制作者たちの多くはそのような現状に特に困っていないのかもしれませんが、たまに不便に感じるケースもあるかと思います。例えば

gitなどソースコード管理ツールで変更箇所の差分をチェックするときなど1行がとても長いと不便
HTMLのソースを作成するときに、エディターやツールでの自動整形を使ったとき、英文は適切に改行されるが日本語はうまくいかない

ですので、Segment Break Transformation Rules が標準化されて使えるものになれば、いくらか便利になると期待します。

そのルールについて考えました。今のドラフト仕様では(https://drafts.csswg.org/css-text-3/#line-break-transform <https://drafts.csswg.org/css-text-3/#line-break-transform>): 
If the character immediately before or immediately after the segment break <https://drafts.csswg.org/css-text-3/#segment-break> is the zero-width space character (U+200B), then the break is removed, leaving behind the zero-width space.(改行の直前または直後の文字がゼロ幅スペースU+200Bなら改行を除去してゼロ幅スペースを残す)
Otherwise, if both the characters before and after the segment break <https://drafts.csswg.org/css-text-3/#segment-break> belong to the space-discarding character set <https://drafts.csswg.org/css-text-3/#space-discarding-character-set> (see Appendix F. Space-Discarding Unicode Characters <https://drafts.csswg.org/css-text-3/#space-discard-set>), then the segment break is removed.(改行の前と後ろの両方の文字ともスペース破棄文字セットに含まれる文字なら改行を削除)
Otherwise, the segment break <https://drafts.csswg.org/css-text-3/#segment-break> is converted to a space (U+0020).(その他の改行はスペースU+0020に変換)

この2番目と3番目の規則の間に、もうひとつ規則を追加することにより、余計なスペースが入ってしまうことを防げればよいのでないかと思いました。
余計なスペースが入ってしまうケースとして、まず次のような和文と欧文の間に改行があるケースが考えられます:

日本語のテキストに
English text
を埋め込む。
↓
日本語のテキストに English text を埋め込む。

しかし、和文と欧文の間にスペースを入れてテキストを書く流儀もあるので、必ずしもこれが「余計なスペースが入ってしまうこと」とはいえません。
改行をスペースに変換すべきか除去すべきか、どちらがよいか曖昧な場合には、これまでのブラウザではスペースに変換していたのだから、スペースに変換するのが無難です。

一方、次のケースでは:

日本語のテキストに、
English textを埋め込む。
↓
日本語のテキストに、 English textを埋め込む。

これでは、読点(、)のあとに余計なスペースが入る結果になります。このスペースが入るのはどう考えても余計だと思います。組版結果では、句読点のあとに英単語があるときに、全角ドリの句読点のあと欧文スペースの分だけ余計にアキができることになります。

もうひとつ、余計なスペースが入ってしまうケース:

日本語のテキストにEnglish text
(英語のテキスト)
を埋め込む。
↓
日本語のテキストにEnglish text (英語のテキスト)を埋め込む。

全角の開き括弧 “(” の前に余計なスペースが入る結果になります。このスペースもどう考えても余計です。句読点同様、全角の括弧類にはアキが含まれるので欧文スペースのアキを追加した組版結果は不自然にあきすぎになります。

日本語のテキストで!や?のあとに次の文が続くときは全角スペース(U+3000)を入れる決まりがあります。そのU+3000の直後に改行がある場合、U+3000はスペース破棄文字セットに含まれるのでそのあとの文字が漢字や仮名ならば改行が除去されるだけで余計なスペースは入りません。しかし、次のように改行のあとが英単語の場合:

日本語のテキスト! 
English textを埋め込む。
↓
日本語のテキスト!  English textを埋め込む。

全角スペースのあとに余計な欧文スペースが入る結果になります。


以上のような余計なスペースが入ってしまわないようにするには、Segment Break Transformation Rules の2番目と3番目の規則の間に次の規則を追加するとよいのでないかと思います:

Otherwise, if either the character before or after the segment break belongs to the space-discarding character set and is a Unicode Punctuation (P*) or U+3000, then the segment break is removed.(それ以外の場合、改行の前または後の文字がスペース破棄文字セットに属し、Unicode句読点類(P*)または U+3000 である場合、改行を削除)


このように Segment Break Transformation Rules が修正されるならば使えるものになるのでないかと思います。
これでも、和文と欧文の間で改行を入れるとスペースが入るというところなど、ケースによっては不満足な結果になりますが、
「スペースを入れるか入れないか、どちらがよいか曖昧な場合には、これまでのブラウザと同様にスペースを入れる」
という原則によって、がまんしてもらうべきでしょう。
この原則を保つべきだと思うので、EAW=Ambiguous である文字をスペース破棄文字セットに入れることにも反対です。

以上、Segment Break Transformation Rules について考えたことでした。


---
村上 真雄 (MURAKAMI Shinyu)

Received on Monday, 11 May 2020 09:18:49 UTC