Scintilla/Other settings

Last-modified: 2008-03-02 (日) 07:29:21

その他の設定

  • SCI_SETUSEPALETTE(bool allowPaletteUse)
  • SCI_GETUSEPALETTE
  • SCI_SETBUFFEREDDRAW(bool isBuffered)
  • SCI_GETBUFFEREDDRAW
  • SCI_SETTWOPHASEDRAW(bool twoPhase)
  • SCI_GETTWOPHASEDRAW
  • SCI_SETCODEPAGE(int codePage)
  • SCI_GETCODEPAGE
  • SCI_SETWORDCHARS(<unused>, const char *chars)
  • SCI_SETWHITESPACECHARS(<unused>, const char *chars)
  • SCI_SETCHARSDEFAULT
  • SCI_GRABFOCUS
  • SCI_SETFOCUS(bool focus)
  • SCI_GETFOCUS

SCI_SETUSEPALETTE(bool allowPaletteUse)

SCI_GETUSEPALETTE

同時に256色しか表示できない8ビットの表示装置では、表示環境がパレットを用いてアプリケーションの色要求を仲裁する。
GTK+ではScintillaは常にパレットを使う。


Windowsでこのようなパレットを使うとアプリケーションを切り替える際に視覚的な発光の問題が起こる。
これはScintillaコントロールを保持するアプリケーションにおいて、いくつかのScintillaメッセージを転送してパレットコードをうまく動作させるために必要なものである。
標準ではパレットは使われず、使う場合はアプリケーションがScintillaにそのことを通知しなくてはならない。
Scintillaがパレットを使わない場合はすでに使用可能な色を単に表示する。
この色はしばしばWindowsのシステム色20色が使われる。


Scintillaがどのようにしてパレットを利用可能にしているかについては、SciTEでWM_PALETTECHANGED、WM_QUERYNEWPALETTE、SCI_SETUSEPALETTEを検索する。
転送すべきWindowsメッセージは次の通りである: WM_SYSCOLORCHANGE、WM_PALETTECHANGED、WM_QUERYNEWPALETTE (TRUEを返すべき)。


メッセージ(WM_XXXX, WPARAM, LPARAM)をScintillaに転送するにはSendMessage(hScintilla, WM_XXXX, WPARAM, LPARAM)というコードが使える。
hScintillaはScintillaウィンドウを作ったときに返されるそのウィンドウへのハンドルである。


Windowsのメッセージを転送する状況にある間、トップレベルウィンドウはすべてのWM_SETTINGCHANGEメッセージをScintillaに送らなくてはならない。
このメッセージは現在マウス設定の正確な変更に使われるが、将来別のユーザインタフェイス部品のために使われる可能性がある。

SCI_SETBUFFEREDDRAW(bool isBuffered)

SCI_GETBUFFEREDDRAW

描画バッファを使うかどうかの設定と現在状態の取得を行う。
描画バッファを用いると、各行毎に直接画面に描画するのではなくいったんパッファに書き込みを行い、その後画面に複製を行う。
バッファを使うとちらつきが抑えられますが処理速度は落ちる。
初期状態ではバッファを使う。

SCI_SETTWOPHASEDRAW(bool twoPhase)

SCI_GETTWOPHASEDRAW

テキストの二段階描画はよりきれいになるが処理速度は落ちる。
単段階描画では同じ装飾を受ける一連の文字を背景とともに描画する。
その一続きの最後の文字が次の文字にかかるような場合、具体的には"V_"のように"V"が異なる装飾の"_"の直前に来るような場合、"V"の右半分は"_"の背景色に塗りつぶされて切れてしまう。
二段階描画では、この現象を避けるためにまず背景色をすべて処理してしまい、その上から文字を背景透過指定で描画する。
二段階描画を描画バッファなしで用いると単段階描画よりもちらつきが大きくなる。
初期状態では二段階描画になっている。

SCI_SETCODEPAGE(int codePage)

SCI_GETCODEPAGE

Scintillaは日本語・中国語・韓国語のDBCSに対応している。
codePageにコードページを指定するとScintillaはダブルバイト文字を一文字として扱うように保証される。
キャレットはダブルバイト文字を割るような位置には来なくなる。
codePageに0を指定するとDBCS対応は無効となる。
初期状態ではSCI_SETCODEPAGE(0)である。


SC_CP_UTF8 (65001)というコードページはScintillaをUnicodeモードにして文書をUTF-8で書かれた文字の流れとして扱う。
テキストは描画される前にその環境における通常のUnicodeエンコーディングを通して変換される。
この結果ヘブライ語・アラビア語・キリル語・漢字を表示できるようになる。
二文字が一行の中で縦に並ぶことがあるタイ語のような言語でもほぼ動作するが、このような文字が分離して視覚的に異常な表示になる問題がある。
双方向テキストは未対応である。


Windowsではコードページに932(日本語 Shift-JIS)、936 (簡体中文 GBK)、949 (韓国語)、および950 (繁体中文 Big5)を設定できる。
ただし、言語依存の実装が環境側に要求される可能性がある。


GTK+ではSC_CP_DBCS (1)を指定することでScintillaを多バイト文字モードにすることができる。
日本語EUCのようなものの処理に使われる。


GTK+では、ロケールはsetlocale(LC_CTYPE, "en_US.UTF-8")といったコードでUnicodeに設定されなくてはならない。
"iso10646"レジストリにあるフォントがフォント集合の中で用いられる。
フォント集合はコンマで区切られた部分フォント仕様の一覧で、各々のフォント仕様は次のいずれかになる:
foundry-fontface-charsetregistry-encoding, fontface-charsetregistry-encoding, foundry-fontface, fontface
例えば "misc-fixed-iso10646-1,*" という形になる。
GTK+ 2.xでは、Pangoフォントはフォントセットよりも使われるべきである。


codePageをSC_CP_UTF8でも0でもない値にした場合の動作はOSに依存する。

SCI_SETWORDCHARS(<unused>, const char *chars)

Scintillaは単語単位の処理を行う関数をいくつか保有している。
単語は特定の文字集合からの文字列のひとつながりで構成される。
どれを単語を構成する文字とみなすかを設定することができる。
文字集合は指定されるまでは標準値を保持している。
例えば、'_'を文字集合の一部とみなしたくない場合は次のようなコードを使う:

SCI_SETWORDCHARS(0, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");

SCI_SETWHITESPACECHARS(<unused>, const char *chars)

SCI_SETWORDCHARSと似ているが、こちらはどの文字をホワイトスペースとみなすかを設定する。
ホワイトスペース文字を指定することでScintillaはユーザに最適のキャレット移動性能を持たせることができる。
単語の先頭や末尾への移動などである。
例えば、句読点文字をホワイトスペースと定義すると、Ctrlを押しながら左右矢印キーを入力したときに通過される。
この関数はSCI_SETWORDCHARSの後に呼び出されるべきである。
SCI_SETWORDCHARSはホワイトスペースの設定を初期状態に戻してしまう。

SCI_SETCHARSDEFAULT

単語と空白文字のデフォルトセットを使用する。
これは、空白、タブおよびコードが0x20未満のほかの文字、単語文字は英数字と'_'をセットする。

SCI_GRABFOCUS

SCI_SETFOCUS(bool focus)

SCI_GETFOCUS

Scintillaは子のメッセージでフォーカスをグラブすることができる。
これはフォーカスハンドリングがWindowsよりも複雑なGTK+で必要である。


SCI_SETFOCUSと共に内部フォーカスフラグを設定できる。
複雑なフォーカス要求を持つクライアントで使われる。
自身が実際のフォーカスを持っていながら、Scintillaが論理的なフォーカスを持っているように示さなくてはならない場合などである。