Scintillaのsyntax highlightingの調査

Scintillaは多数のプログラミング言語に対応していて、syntax highlighting機能もある。

編集中のファイルを言語と対応付けるには、SCI_SETLEXERLANGUAGE(<unused>, const char *name) というコマンドが使える。 nameには言語名を入れれば良い。

syntax highlighting機能で色を設定するには、SCI_STYLESETFORE(int styleNumber, int colour)を使う。 背景色を設定するSCI_STYLESETBACKSCI_STYLESETBOLDSCI_STYLESETITALICというものもある。

styleNumberは各言語の各書式で番号が決まっている。 Scintillainclude/SciLexer.hというヘッダファイルに定義がある。 例えば、

#define SCE_C_DEFAULT 0
#define SCE_C_COMMENT 1
#define SCE_C_COMMENTLINE 2
#define SCE_C_COMMENTDOC 3
#define SCE_C_NUMBER 4

のような感じ。C言語用だとコメント文のstyleNumberは1と思われる。

このような設定が各言語毎にあるので、いちいち設定するのはかなり面倒だし、 なんのことか分らない定義もある。 どこかにドキュメントは無いものか?

rubyの場合、以下のような感じだ。

定義名 番号 意味
SCE_RB_DEFAULT 0 デフォルト?
SCE_RB_ERROR 1 エラー?不明
SCE_RB_COMMENTLINE 2 コメント行
SCE_RB_POD 3 =beginから=endまで
SCE_RB_NUMBER 4 数字
SCE_RB_WORD 5 SCI_SETKEYWORDS(int keyWordSet, const char *keyWordList)で指定したキーワードに対応
SCE_RB_STRING 6 "で囲まれた文字列
SCE_RB_CHARACTER 7 'で囲まれた文字列
SCE_RB_CLASSNAME 8 クラス名
SCE_RB_DEFNAME 9 メソッド名
SCE_RB_OPERATOR 10 各種演算子
SCE_RB_IDENTIFIER 11 クラス名でもメソッド名でもモジュール名でもキーワードでも無いもの
SCE_RB_REGEX 12 正規表現/で囲まれた箇所
SCE_RB_GLOBAL 13 グローバル変数$hogeなど
SCE_RB_SYMBOL 14 シンボル:hogeとか
SCE_RB_MODULE_NAME 15 モジュール名
SCE_RB_INSTANCE_VAR 16 インスタンス変数。@hogeみたいな|
SCE_RB_CLASS_VAR 17 クラス変数。@@hogeとかね
SCE_RB_BACKTICKS 18 バッククォートで囲まれた文字列
SCE_RB_DATASECTION 19 DATA__END__以降の行。この機能使ったことないな
SCE_RB_HERE_DELIM 20 ヒアドキュメントの始まりと終りを示す文字列
SCE_RB_HERE_Q 21 ヒアドキュメントの中身
SCE_RB_HERE_QQ 22 未使用?
SCE_RB_HERE_QX 23 未使用?
SCE_RB_STRING_Q 24 よくわからない?
SCE_RB_STRING_QQ 25 不明?
SCE_RB_STRING_QX 26 これもわからない?
SCE_RB_STRING_QR 27 なんだろう?|
SCE_RB_STRING_QW 28 はて?
SCE_RB_WORD_DEMOTED 29 例えば、stmt if testifみたいなの
SCE_RB_STDIN 30 未使用?
SCE_RB_STDOUT 31 未使用?
SCE_RB_STDERR 40 未使用?
SCE_RB_UPPER_BOUND 41 未使用?

実験しても、よくわからないのもあった。