Scintilla と SciTE の双方に新しい解析器を加える手順の道程は短くありません。Apache の CONF ファイル解析器を SciTE に追加する方法についての私の回答をここで紹介します。解析器のコードを核に当たって(step 4 と 5)、情報がさらに Scintilla の解説書にあります。
The process of adding a new lexer to both Scintilla and SciTE
is fairly long. Here is my response when asked how to add a lexer for
Apache CONF files to SciTE. There is more information on writing the
lexer code (steps 4 and 5, here) in the documentation for Scintilla.
設定の手順が煩わしくないように、六つ全ての makefile を使わなくてもいいようになっています。解析器を寄贈してもらえる場合は、私が後ほど修正・合成を行います。
Don't bother about steps which are for configurations you don't
use all 6 makefiles - I'll patch them up later if you want to
contribute the lexer.
- scintilla/include/Scintilla.iface に解析器識別番号を加えてください。
val SCLEX_CONF=17
In scintilla/include/Scintilla.iface, add a lexer ID value:
val SCLEX_CONF=17
- それから解析分類識別番号を加えてください。
val SCE_CONF_DEFAULT=0
val SCE_CONF_COMMENT=1
And any lexical class IDs:
val SCE_CONF_DEFAULT=0
val SCE_CONF_COMMENT=1
- scintilla/include ディレクトリにある HFacer.py を実行し、SciLexer.h を再作成してください。Python スクリプトを実行しないで済ませる場合は これらの値を #define で SciLexer.h に定義してください。この場合は私が Scintilla.iface に追加します。
In the scintilla/include directory run HFacer.py to regenerate the
SciLexer.h file. Alternatively (if you don't want to run a Python script)
just add these values to SciLexer.h as #defines and I'll put them in
Scintilla.iface.
- scintilla/src/LexOthers.cxx の中に ColouriseConfDoc 関数を書いてください。ColouriseLatexDoc のような他の関数のひとつと似たものを書きます。
static void ColouriseConfDoc (unsigned int startPos, int length, int
initStyle, WordList *[], Accessor &styler) {
In the scintilla/src/LexOthers.cxx write a ColouriseConfDoc function
similar to one of the other functions such as ColouriseLatexDoc.
static void ColouriseConfDoc (unsigned int startPos, int length, int
initStyle, WordList *[], Accessor &styler) {
- ファイルの終わりに解析器識別番号と名前を関数に結びつけてください。
LexerModule lmConf(SCLEX_CONF, ColouriseConfDoc, "conf");
At the end of the file associate the lexer ID and name with the function:
LexerModule lmConf(SCLEX_CONF, ColouriseConfDoc, "conf");
- 複雑な解析器の場合は、独自のファイルに分けた方がいいでしょう。既存のファイルの一つを複製し、LexOthers が現在参照している make ファイルに新しいファイルを追加します。具体的には scintilla/win32/makefile, scintilla/win32/scintilla.mak,
scintilla/gtk/makefile, scite/win32/makefile, scite/win32/scite.mak です。
If this is a complex lexer then it may be better off in its own file, in
which case clone one of the current files and then add the file to all of
the make files where LexOthers is currently referenced -
scintilla/win32/makefile, scintilla/win32/scintilla.mak,
scintilla/gtk/makefile, scite/win32/makefile, and scite/win32/scite.mak.
- scite/src/others.properties に解析器と関係するファイル拡張子の項目を追加してください。
lexer.*.conf=conf
LexOthers に追加するのではなく新しい解析器ファイルを作っている場合は、scite/src/others.properties を複製して新しい属性ファイルを作るべきです。このファイルには次のような変更を行います。
To the scite/src/others.properties add an entry to associate the file
extension with the lexer:
lexer.*.conf=conf
If a new lexer file was created instead of adding to LexOthers, then a
new properties file should be created by cloning scite/src/others.properties
and modifying that file in the following steps.
- 書式を用意します。
# 基本状態
style.conf.0=fore:#FF0000,bold
# 注釈
style.conf.1=fore:#007F7F,$(font.comment)
Set up the styles:
# Default
style.conf.0=fore:#FF0000,bold
# Comment
style.conf.1=fore:#007F7F,$(font.comment)
- Windows では scite/src/others.properties に conf ファイル用のフィルタを追加します。この機能は将来 GTK+ でも動作させる予定です。
filter.conf=Configuration (.conf)|*.conf|
If on Windows (someday this may work on GTK+ too), a filter should be
added for conf files in scite/src/others.properties:
filter.conf=Configuration (.conf)|*.conf|
- scite/src/SciTEGlobal.properties に open.filter 定義用の $(filter.conf) を追加してください。
In scite/src/SciTEGlobal.properties add $(filter.conf) to the definition
of open.filter.
- menu.language 属性に項目を追加して SciTE の文書の種類メニューにこの文書種を増やしてください。文書種の名前とその文書に一番よく用いられる拡張子を指定します。
To add this language to the Language menu of SciTE, add an entry to the menu.language
property including the name of the language and the file extension used most commonly
for it.
- Scintilla と SciTE をビルドします。
Build both Scintilla and SciTE.
- 共有財産にしてお楽しみください。
Share and enjoy