IE7の検索ボックスが途中で切れるバグ カシーダとタトゥウィール


 Internet Explorer 7で、ctrl+Fで表示される検索ボックスが途中で切れる現象があります。おそらくバグです。
IE7の検索ボックスが途中で切れるバグ カシーダとタトゥウィール
 ただし、この現象はアラビア語入力をインストールしていなければ、多分発生しません。

 アラビア語入力を有効化していると、検索ボックスに通常ではない「kashidaで検索する」「アレフ ハムザを区別する」という二つのオプションが追加されるため、画面スペース的に収まりきらなくなって途中で切れているようです。ギリギリ「はい」が押せますし、まぁ別にいいですけれど。
 kashida(كشيدة Keshideh カシーダ)というのは初耳だったのですが、アラビア語などで用いられる均等割り付け法のようです。アラビア語では、英語の筆記体のように文字を繋げて書くのが普通、というか英語のブロック体に相当する書き方というのは存在しないのですが、こうした筆記法で通常のjustificationのように文字間のスペースを伸ばそうとすると、そもそものスペースがないため、文字自体が「うにょーん」と伸びることになります。しかし単純に伸ばしてしまうと、筆記上不自然な場所も同じように長い文字になってしまいますし、筆記体では毛筆でもラテン文字のカリグラフィでも「伸ばすならここを伸ばせ」というポイントがあるものです。カシーダというのは、どうもこの「インテリジェントな均等割り付け」のことのようです。
 手動で「うにょーん」と伸ばそうとすると、伸びる線を入力することになりますが、この「うにょーんの線」をTatweel(تطويل タトゥウィール)と呼び、unicodeではU+0640の”Arabic Tatweel”が相応し、アラビア語入力モードですとShift + Jで入力できます。これで見た目は思うままに整えられるのですが、このままですと検索を行う際に伸びた単語と伸びていない普通の単語が別の語として認識されてしまいます。この両者を区別するかしないか、というのが「kashidaで検索する」の意味らしいです。チェックを付けると区別するのか、しないのかは確認していません(笑)。
 「アレフ ハムザを区別する」というのは、アリフがハムザの台として使われているときにどういう文字として認識するか、というようなことだと思います。アリフというのはアラビア語の一番最初の文字で、これ自体では音価を持っていません。「アー」の長母音を表したり、「アン」というn音を付加するのによく使われるのですが、ハムザという正門閉鎖音を表す文字と合体して「ッア」みたいな一瞬息を止めて出すハッキリ目の音を示すことがあります。ちなみに、ハムザ単独でもこういう音を表す場合があるので「アリフいらんやないか」とツッコみたくなるのですが、そういうことを考えているとアラビア語は絶対習得できないので、黙って従います。このハムザの台に使われているアリフを単独で用いられているハムザと区別するとかしないとか、普通のアリフと区別するとかしないとか、その辺りのオプションだと思うのですが、これまた確認していません(笑)。
 アラビア語入力を使用していても、おそらく英語バージョンのIEでしたら、文字数的にダイアログに収まっているのでしょう。流石に英語圏でこんな露骨な不具合があれば、すぐに直しているはずです。日本語+アラビア語の場合のみ発生する現象かもしれません。

 カシーダとタトゥウィールのことを調べていたところ、cssのtext-justifyにkashidaという値があるのを発見しました。これはtext-align: justifyの時に有効になるオプションの一つで、

文字を引き伸ばす事によって(‘font-stretch’のような効果)両端ぞろえを行います。’text-kashida-space’で細かな制御が可能です。最後の行の処理方法は定義されていません。アラビア語などを想定しています。

という説明があったのですが、つなげて書く文字ではそもそも文字を伸ばすしか選択肢がないわけで、今ひとつ意味がよくわかりません1
 というわけで、こちらが実際に試してみたカシーダのサンプルです(エントリ内に貼り付けようとしたのですが、WordPressが勝手に整形してうざいので、別ファイルにしました)。
 一行目が英文、二行目が日本語、三行目と四行目はアラビア語で、四行目にはラームとミームの間にタトゥウィールを三つ入れてあります。

 「同じやないかっ」と一瞬ツッコみそうになったのですが、よく見ると違います。
 newspaperとkashidaを比べて頂きたいのですが、newspaperが機械的に文字を伸ばしているのに対し、kashidaではタトゥウィールの有無に関わらず最後の文字とその前の文字が伸びています。text-justify:kashidaというのは、タトゥウィールを考慮するのではなく、「伸ばすべきポイント」を伸ばしてくれる機能っぽいです。「アッサラーム」のラームとミームの間が伸びているのは自然でも、「アライクム」のカーフが伸びているのはちょっと変な気がするのですが・・。
 「最後の行の処理方法は定義されていません」とあった通り、行の最後に強制改行のbrが入っていないと、均等割り付けしてくれません。

 ちなみに、تطويلは「長い」の「タウィール」がベースになった派生第二形「タッワラ」というのがあって、それはおそらく「伸ばす」という意味で、かつ動名詞「伸ばすこと」が「タトゥウィール」なのだろうな、ということはわかるのですが、「カシーダ」の方は語源がよくわかりません。わたしのアラビア語レベルはこの程度です。

追記:
 ユニコード / 符号化法 – コンピュータとアラビア語に、

kashida という語は、ペルシャ語で「引き伸ばされた」という意味のキャシーデ kashīde がアラビア語化したものだ、と「アラビア系文字の基礎知識」に書いてありました。

 という説明がありました。このページは本当にすごいです。ありがとうございます!

参考:
huixingの日記:アラビア語のカシーダ
MSDN:Justifying Text using Cascading Style Sheets (CSS) in Internet Explorer 5.5

  1. 単語間のスペースの他、次の文字につながらない文字というのがあるので、そこではスペースを伸ばすことができる。 []