Scintillaのsyntax highlightingの調査
Scintillaは多数のプログラミング言語に対応していて、syntax highlighting機能もある。
編集中のファイルを言語と対応付けるには、SCI_SETLEXERLANGUAGE(<unused>, const char *name)
というコマンドが使える。
name
には言語名を入れれば良い。
syntax highlighting機能で色を設定するには、SCI_STYLESETFORE(int styleNumber, int colour)
を使う。
背景色を設定するSCI_STYLESETBACK
やSCI_STYLESETBOLD
、SCI_STYLESETITALIC
というものもある。
styleNumber
は各言語の各書式で番号が決まっている。
Scintillaのinclude/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 test のif みたいなの |
SCE_RB_STDIN | 30 | 未使用? |
SCE_RB_STDOUT | 31 | 未使用? |
SCE_RB_STDERR | 40 | 未使用? |
SCE_RB_UPPER_BOUND | 41 | 未使用? |
実験しても、よくわからないのもあった。