In-D Board の No.7794 が興味深いので、ここでもう少し取り上げてみます。
InDesign CS3以降で「→」に欧字が隣接していると行分割禁止になってしまうのは、UAX#14 が背景にあると見て間違いないでしょう。そこで「→(U+2192)」の改行プロパティを見ると「AI」になっています。
AIは「EAWがAであり、それをNとして扱うならALと同等、それ以外はIDと同等」ということらしい。
EAW は UAX#11 のことで、東アジアのレガシーな文字セットを考慮した文字幅のプロパティを定めています。文字幅といっても、フォントのグリフの字幅のことだけではありません。
例えば、Shift JIS では1バイトは半角、2バイトは全角とはっきり分かれていて、プログラムでも文字のバイト数だけで半角/全角の区別ができます。
ここで注意してほしいのは、「半角/全角」と文字幅で表現しているのは便宜的にそうしているだけで、要はその文字が「欧字なのか」「欧字以外なのか」ということです。Shift JIS では文字のバイト数だけでその区別ができたけれども、Unicode ではできない。そこで、この区別を文字ごとに東アジアの文字幅プロパティとして持たせたのが UAX#11 です。
これは文字組版の行分割(UAX#14)に関わります。欧字が連続した文字列は「単語」です。単語は途中で行分割しないのが欧文組版のルールです(途中で行分割できるのはハイフネーションのみ)。和字は(禁則に関わらないのなら)どの文字でも行分割できます。
それでは「→」の文字幅プロパティを見てみましょう。たしかに「A」になっています。A は曖昧(Ambiguous)のこと。半角/全角どちらにも決められない曖昧な文字ということです。私たちの感覚では「→」は全角でしょ! と言いたいところですが、「→」は今や欧文フォントにも普通にあります。そこでは全角ではなくプロポーショナル幅になっています。
「Nとして扱うならALと同等、それ以外はIDと同等」は、つまり「欧字とするならアルファベットと同等、それ以外は漢字と同等」に行分割するということです。「欧字/それ以外」の区別は、プログラムの実装にまかせています。
ここでやっと InDesign に戻ってこれました。InDesign は「→」を CS2 までは欧字以外にしていたのに、CS3 で欧字と同等に変えてしまった。そのため「→」に欧字が隣接していると「→」も含めて単語なので、途中で行分割できなくなる。「→」だけでなく、上記の掲示板で流星さんが調べたように、そんな文字が他にもある。
なお、文字パネルの[言語]は ハイフネーション辞書や OpenType フォントの Language の設定であって、ここを「日本語」にしても「→」を和字扱いにさせることはできません。アキ量設定の文字クラスとも無関係です。
行分割の仕様はさらにずっとローレベルのユーザがいじれないところにあります。こんな仕様、私たちにしてみれば迷惑でしかない。どうにかしてほしいですよねぇ…
追記 1
CS2 で[環境設定 > 組版 > 文字組み互換モード]に[CID ベースの文字組みを使用]が追加されましたよね。これと同様に、CS3で[Unicode ベースの行分割を使用]を追加するべきだったと思います。これは次バージョンからでも付けるべきでしょう。
追記 2
もっとよく考えると、曖昧(Ambiguous)を半角/全角どちらにするかは、コンポーザーで分けるべきですね。「→」は日本語コンポーザーなら全角、日本語以外のコンポーザーなら半角扱いにすれば筋が通ります。