2015-12-09 15 views
12

私はpangoを使用するテキストボックスの実装を持っています。私が右から左へのスクリプトで単語で始まり、スペースの後に左から右へのベースのスクリプトで単語が続くと、パンゴが使用する単語のラッピングは(PANGO_WRAP_WORD_CHARを使って)うんざりしてしまいます。文字列العربيةENGLISHのために私は、次を得る:pangoで混在スクリプトを使用したワードラップ

Bad word wrapping

私はスペースの後にUnicode文字U+200Fを追加する場合は、私が期待されるワードラップを得る:

また

Expected word wrapping

、私は(左から右横に英語など)ヒンディー語とアラビア語の上にスクリプトを交換する場合、厳密に左から右ではないようですので、私はまだ、問題を取得し、右左からヒンディー語の場合、私は問題を解決するスペースの後に0x200Eを挿入するハックを入れました。

これはパンゴのバグですか?問題を解決するのに十分な汎用性があるが、他のケースを破ることはできない回避策がありますか?現在の私の周りの仕事は、文字列内の以前の強く指向された文字の方向に基づいてすべてのスペースの後に0x200Eまたは0x200Fのいずれかを挿入して使用していますが、これが問題を引き起こす特定の文字列があるかどうかはわかりません。

アップデート:私はgeditのでUbuntuの12.04でこの問題を再現することができました(テキストラッピング有効とし、有効になって二行設定よりスプリットワードを行いません)。何回か折り返されるまでHello worldと繰り返しタイプし、worldのすべてのインスタンスをपहुंचगयाに置き換え、すべてを1行にまとめました。

+0

RTLの後にLTRの単語(またはその逆)が1つの単語として扱われるため、ワードで折り返しを選択すると2つの単語に分割されません。 –

+0

質問を更新して、LTRスクリプトのみを交互に使用している場合(英語とヒンディー語など)にも問題が発生することをお伝えします。 – pauld

答えて

6

記号U+200FU+200Eは、右と左と右のマークです。 S:それぞれの英語のテキストとアラビア語テキストの間

  • 、各アラビア語のテキストと英語のテキストの間でRIGHT-TO-LEFTマーク
  • を入れて、左から右へのマークを入れ

それは、 Pangoは自動的にテキストを表示するはずだが、Pangoはそれをしていないので、手動で行うべきである。

+0

ありがとうございます。私はこれがパンゴのバグか、これらの記号が必要かどうかを調べようとしています。同じテキストをMicrosoftのテキストボックスまたはQtテキストの編集ボックスに入れた場合、結果は私が期待するものです(下の図のようになります)。 – pauld

5

混在したスクリプトに表示されるので、私にはバグか完全ではないようです。

古いPangoの開発を使用している私には見える、Ubuntuの12.04からのものであってもよいですか?

Ubuntu 12.04 contains Gedit 3.4 
Ubuntu 15.10 contains Gedit 3.10 

パンゴは3.6に根本的な変更を加えました。彼はシェーピングエンジンをHarfBuzzに置き換えました。私はGeditの15.10を使用してバグを再現できなかった[2]

、それは常に(2)二つの単語下方に移動し、また、それは私がこれら二つの単語を分割しようとするそのウィンドウのサイズを変更することはできません。スクリーンショットを参照してください。

pango shaping mixed scripts in gedit

更新:

その動作が変更されているようだ:

  • アラビア語で始まるときには、英語のスクリプトから第一単語をラップしません。

    01:

    pango-view --text "وقعت أطراف سياسية ليبية اليوم في المغرب اتفاق سلام برعاية أممية aljazeeranet" --width=70 --margin=0 --wrap=word 
    

    enter image description here

  • これは、同じ前の場合のように、幅

    pango-view --text "elections الجزيرة" --width=30 --margin=0 --wrap=word 
    

    enter image description here

参照をラップし、強制しません

+2

助けてくれてありがとう。あなたの投稿の後、私はubuntu 15.1のgeditでこれを試してみました。同じ結果が得られました(上記のhello worldのテストケースを使用しています)。 – pauld

+0

私はまた、どのバージョンのpango ubuntu 15.1が使用しているのかよくわかりません。 '/ usr/lib'からパンゴを探していますが、私が見るのは' libpango-1.0.so.0'だけです(同様のバージョンのものもあります) – pauld

+1

@pauld、私はそれを再現できました。 '--wrap = word'、あなたの質問が' word-char'ラッピングモードについてはっきりしていたからです。 Ubuntu 15.10と同じ動作です。だから、この答えは私が後でそれを削除する問題とは無関係です。 'U + 200F'と' U + 200E'だけでなく、すべてのコントロール文字で英語の単語を囲みます。今までU + 202C、U + 061C、U + 202A、U + 2069のテストを行ったことがあります。 –

0

注意、我々は最近、我々はPangoのバージョン1.36.1から1.38.1に、使用され、この問題は去っていきましたPangoのバージョンをアップグレードしました。だから私はこれが固定されたパンゴやハーフバズのバグだと思う。