Scintilla/Markers

Last-modified: 2008-03-01 (土) 21:46:31

マーカー

0~31に付番された32のマーカーがある。そして、あなたはどんな組み合わせもドキュメントの各行に割り当てることができる。
マーカーは選択マージンにテキストの左まで現れる。
選択マージンを幅をゼロに合わせるように設定するなら、代わりに全体の行の背景色を変える。
マーカー番号25から31は、折りたたみマージン、および、たとえばSC_MARKNUM_FOLDEROPENのようなSC_MARKNUM_*書式のシンボリック名でScintillaによって使われる。


マーカー番号0から24は事前に定義された機能がない; あなたは、構文エラーか現在のポイントの実行、ブレークポイント、またはマークして、あなたがそうしなければならないものなら何でもマークするのにそれらを使用できる。
折りたたむ必要はないなら、あなたは願っているどんな目的にもすべての32を使用できる。


それぞれのマーカー番号には、それに関連しているシンボルがある。
マーカ番号毎に前景色と背景色を指定することができるので、同じ符号を別目的の別の色で使うことができる。
Scintillaは符号の集合を持っており、(SC_MARK_*)に割り当てたり、文字を使ったりすることができる。
初期状態では、32の全てのマーカがSC_MARK_CIRCLEに割り当てられており、前景色が黒、背景色が白となっている。


マーカはその番号順に描画される。
したがって番号の大きいマーカが低いマーカの上に現れる。
マーカがある行が移動する場合、行頭の移動先を追跡することでマーカの移動が試みられる。
もしマーカのある行が削除された場合、マーカの情報はその前の行のマーカ情報とOR演算で合成される。

  • SCI_MARKERDEFINE(int markerNumber, int markerSymbols)
  • SCI_MARKERDEFINEPIXMAP(int markerNumber, const char *xpm)
  • SCI_MARKERSETFORE(int markerNumber, int colour)
  • SCI_MARKERSETBACK(int markerNumber, int colour)
  • SCI_MARKERSETALPHA(int markerNumber, int alpha)
  • SCI_MARKERADD(int line, int markerNumber)
  • SCI_MARKERADDSET(int line, int markerMask)
  • SCI_MARKERDELETE(int line, int markerNumber)
  • SCI_MARKERDELETEALL(int markerNumber)
  • SCI_MARKERGET(int line)
  • SCI_MARKERNEXT(int lineStart, int markerMask)
  • SCI_MARKERPREVIOUS(int lineStart, int markerMask)
  • SCI_MARKERLINEFROMHANDLE(int handle)
  • SCI_MARKERDELETEHANDLE(int handle)

SCI_MARKERDEFINE(int markerNumber, int markerSymbols)

0~31のマーカ番号とマーカシンボルもしくはASCII文字を関連付ける。
目的の特化されていないシンボルは現在以下のものが用意されている:

SC_MARK_CIRCLE, SC_MARK_ROUNDRECT, SC_MARK_ARROW, SC_MARK_SMALLRECT, SC_MARK_SHORTARROW, SC_MARK_EMPTY, SC_MARK_ARROWDOWN, SC_MARK_MINUS, SC_MARK_PLUS, SC_MARK_ARROWS, SC_MARK_DOTDOTDOT, SC_MARK_EMPTY, SC_MARK_BACKGROUND および SC_MARK_FULLRECT.


マーカSC_MARK_BACKGROUNDは行の背景色を変更するだけである。
SC_MARK_EMPTYは見えないマーカで、行を追跡することに使える。
また、折りたたみへの装飾を変更してSC_FOLDERNUM_*を関係のないシンボルと結びつけたいときにも使える。


余白の中で平坦な木の形に折りたたみを表現するためのマーカシンボルは次の通りである:

SC_MARK_BOXMINUS, SC_MARK_BOXMINUSCONNECTED, SC_MARK_BOXPLUS, SC_MARK_BOXPLUSCONNECTED, SC_MARK_CIRCLEMINUS, SC_MARK_CIRCLEMINUSCONNECTED, SC_MARK_CIRCLEPLUS, SC_MARK_CIRCLEPLUSCONNECTED, SC_MARK_LCORNER, SC_MARK_LCORNERCURVE, SC_MARK_TCORNER, SC_MARK_TCORNERCURVE, and SC_MARK_VLINE.


文字もマーカとして利用可能である。
文字のASCII値にSC_MARK_CHARACTER (10000)を加えて指定する。
例えば'A'(ASCIIコード65)をマーカ番号1に使うのであればSCI_MARKETDEFINE(1, SC_MARK_CHARACTER+65)というコードを実行する。


マーカ番号SC_MARKNUM_FOLDERとSC_MARKNUM_FOLDEROPENは折りたたみ部分が開いているか閉じているかを標示するために使われる。
どのシンボルもこの目的で割り当てることができるが、(SC_MARK_PLUS, SC_MARK_MINUS)もしくは(SC_MARK_ARROW, SC_MARK_ARROWDOWN)の組を選択するのがよいだろう。
平坦木で表示するにはほかにも次のものへの割り当てが必要である: SC_MARKNUM_FOLDEREND, SC_MARKNUM_FOLDERMIDTAIL, SC_MARKNUM_FOLDEROPENMID, SC_MARKNUM_FOLDERSUB, SC_MARKNUM_FOLDERTAIL。
折りたたみに使う分のビットはSC_MASK_FOLDERSで表現できる。
これは通常折りたたみ用の余白に対してSCI_SETMARGINMASKNの引数で用いられる。


次の表は、四種の折りたたみ表示においてどのSC_MARK_*シンボルがどのマーカ番号SC_MARKNUM_*に割り当てられるべきかを示している: Macintoshを模した矢印、'+'と'-'で閉じた折りたたみと開いた折りたたみを表現したもの、丸い記号の木、四角の記号の木がこの四種である。

 

[heart] 表: 折りたたみのためのマーカー

SC_MARKNUM_*ArrowPlus/minusCircle treeBox tree
FOLDEROPENARROWDOWNMINUSCIRCLEMINUSBOXMINUS
FOLDERARROWPLUSCIRCLEPLUSBOXPLUS
FOLDERSUBEMPTYEMPTYVLINEVLINE
FOLDERTAILEMPTYEMPTYLCORNERCURVELCORNER
FOLDERENDEMPTYEMPTYCIRCLEPLUSCONNECTEDBOXPLUSCONNECTED
FOLDEROPENMIDEMPTYEMPTYCIRCLEMINUSCONNECTEDBOXMINUSCONNECTED
FOLDERMIDTAILEMPTYEMPTYTCORNERCURVETCORNER
 

SCI_MARKERDEFINEPIXMAP(int markerNumber, const char *xpm)

マーカーはこのメッセージがあるpixmapsに用意ができることができる。
XPM形式はpixmapに使用され、それは命名された色なしで1ピクセルあたり1つの文字を使用するpixmapsに制限される。
透明色は'None'と命名されるかもしれない。
データはヌルで終端すべきである。
PixmapsはSC_MARK_PIXMAPマーカーシンボルを使用する。
あなたはここでXPM形式の余すところのない解説を見つけることができる。

SCI_MARKERSETFORE(int markerNumber, int colour)

SCI_MARKERSETBACK(int markerNumber, int colour)

これら2個のメッセージは、マーカー番号の前景色と背景色をセットする。

SCI_MARKERSETALPHA(int markerNumber, int alpha)

マーカーが満足している領域に描かれるとき、それらのためのマージンが全くないか、それらがSC_MARK_BACKGROUNDタイプのものである。文字値を設定することによって、わかりやすく描かれるかもしれない。

SCI_MARKERADD(int line, int markerNumber)

指定行に指定番号のマーカを追加する。
行番号がおかしい場合やメモリ不足などで失敗すると-1を返す。
それ以外の場合は追加後のマーカ制御番号を返す。
マーカ制御番号は、移動や行の結合後のマーカを探す際のSCI_MARKERLINEFROMHANDLEや、マーカを削除する際のSCI_MARKERDELETEHANDLEで使用することができる。
指定されたマーカ番号自身や、すでにその行にマーカがあるかどうかは調べない。

SCI_MARKERADDSET(int line, int markerMask)

このメッセージが1つまたは一度の呼び出しでより多くのマーカーを追加できる。SCI_MARKERGETによって返された同じ"1マーカーあたり1ビット"の32ビットの整数形式で指定される(そして、マスクベースのマーカーによって使用されて、SCI_MARKERNEXTとSCI_MARKERPREVIOUS機能を検索する)。
SCI_MARKERADDのように、チェックが全くマーカーのどれかが狙っている行に既に出席しているかどうかを見ない。

SCI_MARKERDELETE(int line, int markerNumber)

指定行番号で指定マーカ番号を探し、そのマーカがあればマーカを削除する。
同じマーカを複数回加えていた場合はこれを一回にひとつずつ削除していく。
マーカ番号に-1を指定すると、その行のすべてのマーカが削除される。

SCI_MARKERDELETEALL(int markerNumber)

これはすべての行から特定の数のマーカーを取り外す。
もしmarkerNumberが-1なら、すべての行からすべてのマーカーを削除する。

SCI_MARKERGET(int line)

これはどのマーカーが行にプレゼントしていたかを示す32ビットの整数を返す。
ビット0はマーカー0がプレゼント、マーカー1のためにビット1などであれば設定される。

SCI_MARKERNEXT(int lineStart, int markerMask)

SCI_MARKERPREVIOUS(int lineStart, int markerMask)

指定された行以前または以後から指定されたマーカの集合を検索する。
検索は行番号lineStartの行から始まり、ファイルの終端方向(SCI_MARKERNEXT)もしくは開始位置方向(SCI_MARKERPREVIOUS)へ検索を続ける。
引数markerMaskは検索したいマーカを示す少なくとも一つのビットが指定されているべきである。
低位ビットからマーカ番号0、1に対応しており、立てられると検索対象となる。
markerMaskに含まれているマーカのいずれかがはじめて見つかった行番号を返す。
見つからなかった場合は-1を返す。

SCI_MARKERLINEFROMHANDLE(int markerHandle)

引数markerHandleはSCI_MARKERADDから返されたマーカへの識別子である。
この関数はこの識別子があるマーカを検索する。
見つかればその行番号、見つからなければ-1を返する。

SCI_MARKERDELETEHANDLE(int markerHandle)

引数markerHandleはSCI_MARKERADDから返されたマーカへの識別子である。
この関数はこの識別子があるマーカを検索し、見つかればこのマーカを削除する。