ルビを折り返す技術的困難

下の GH issue において、Nat さんが、なぜ InDesign が熟語ルビをサポートしていないかの理由の一つ(他にもある?)を説明してくれています(thank you Nat!)。
https://github.com/w3c/jlreq-d/issues/19



折り返す前からルビのはみ出しが起こっている場合、また折り返すとはみ出しの起こる場合、下の例に示すように折り返した場合のそれぞれの断片の幅が単純な足し算で計算できません。折り返し地点を探すのに、一文字目で折り返したら、二文字目で折り返したら、と順々にレイアウトをやり直して計算してゆかなければなりません。これがコードの複雑さ and/or 処理時間的にきついようです。

例えば添付の最初の「哺乳類」の熟語ルビの例ですが、折り返さない場合および「哺乳」で折り返した場合には単純に計算できます。しかし「哺」で折り返した場合には、「乳類」のルビが「にゅうるい」と五文字となってはみ出しが起き、文字幅が全角二文字より大きくなります。つまり全体の文字幅が折り返し前の全角三文字分より大きくなります。次の例も同様です。最後の例は simple-ruby にあったグループルビの折り返しの例です。

折り返す前からルビのはみ出しが起こっている場合には、機械的に折り返した場合でも起こります。折り返したい文字の切れ目にルビ文字がかかっていると、そのルビ文字を前に所属させるか後ろに所属させるか決めなくてはなりませんが、所属させた側の長さはそれまでより長くなります。また同様の問題がルビ文字列の禁則処理によっても起こります。

a) 処理の難しさを解決するようなルールを考える、または、b) より簡単に処理する方法を考える、ことはできるでしょうか? 「難しい」の内容をもう少し詳しく知る必要があるかもしれませんね。






Received on Friday, 26 August 2022 02:48:44 UTC