文法定義スクリプトについて (スクリプトバージョンv3.0)
文法定義スクリプトを作成することにより、コメント・リテラル部分の色づけだけではなく、 よりそれぞれの言語に合わせた複雑な文法を認識し、色づけや識別子認識をすることができます。
こちらのページにサンプルを置いています。ご参照下さい。
基本
miは文法定義スクリプトで定義された状態遷移に基づいて、テキストを走査し、
テキスト内の各文字に状態を割り付けます。
(この「テキスト」とは文法定義スクリプトのことではなく、文法認識対象のテキストのことです。)
そして、各状態に色を付けたり、状態遷移時に識別子を登録したりすることが出来ます。
テキストの走査
miは、テキストをトークン毎に読み進めます。
テキストの現在位置以降の文字列が、スクリプトに記述された一致文字列に一致した場合、状態遷移を行います。
トークン
トークンとは、単語、もしくは、記号一文字です。
単語を構成する文字は、以下のいずれかの方法で設定します。
GlobalAttribute_SyntaxPart()
の第4, 5, 6引数にて設定します。
文法パート毎に単語を構成する文字を設定することができます。[v3.0 新規]GlobalAttribute_StartAlphabet
、および、GlobalAttribute_ContinuousAlphabet
で設定します。
基本文法
- #以降はコメントとみなされます。
- 大文字小文字は区別されます。
- 文字列は基本的にダブルクオーテーションで囲みます。
- 文字列内にダブルクオーテーションやバックスラッシュを記述するときはエスケープ文字(バックスラッシュ)の後に記述します。
- 変数使用時に宣言等は必要ありません。
全体構成
文法定義スクリプトは下記の3パートに分かれています。
- GlobalAttribute部(全体的なパラメータの設定)
- state部(状態定義)
- category部(カテゴリ定義)
文法パート
HTML文書内のCSSパート、JavaScriptパートなど、1つのドキュメント内で複数の「文法パート」を設定し、 キーワードをそれぞれのパート内のみで有効にしたり、単語構成文字をパート毎に設定したりすることができます。
互換性
旧バージョン用の文法定義スクリプトは、新しいバージョンでも読み込むことができます。
ただし、バージョン3でカラースキーム機能に対応した関係上、
バージョン2用の文法定義スクリプトをバージョン3で読み込むと、色が正しく表示されません。
下記の修正をお願いします。
- 色付けを行いたいstateに
StateAttribute_ColorSlot(色タイプ番号)
を記述します。 - 色付けを行いたいcategoryに
CategoryAttribute_ColorSlot(色タイプ番号)
を記述します。
色タイプ番号
は色タイプ番号の節を参照下さい。
GlobalAttribute部
全体のパラメータを設定します。
下記のパラメータを改行・スペース・タブのいずれかで区切って記述します。
GlobalAttribute | 説明 | 備考 |
---|---|---|
GlobalAttribute_SDFName("名前") |
文法スクリプトの名前を記述します。モード設定の「文法」タブでのメニュー表示に表示されます。文法認識の動作には影響しません。 名前はダブルクオーテーションで囲って記述します。 |
|
GlobalAttribute_SDFVersion("バージョン") |
文法スクリプトの対応バージョンを記述します。 現状、文法認識の動作には影響しません。 "3.0" を記述して下さい。 |
|
GlobalAttribute_SyntaxPart("文法パート名","文法パートグループ名",初期状態名,
"単語の最初になりうる文字","単語の途中の一文字になりうる文字","必ず単語の最後になる文字" [,
"対応文字列1(開始文字列)","対応文字列1(終了文字列),
"対応文字列2(開始文字列)","対応文字列2(終了文字列),...]) |
文法パートを設定します。 文法パート名には、文法パート名を記述します。 この文法パート名は、 StateAttribute_SyntaxPart() の引数に使用します。文法パートグループ名には、文法パートのグループ名を指定します。 文法パートグループ名が変化する行では、テキスト画面上に文法パート分割線が表示されます。 また、ツールフォルダに文法パートグループ名に一致するフォルダがあれば、そのフォルダが の開始フォルダとなります。 初期状態名には、この文法パートの初期状態を記述します。 単語の最初になりうる文字、単語の途中の一文字になりうる文字、必ず単語の最後になる文字には、 それぞれ単語を構成する文字を設定します。 対応文字列(開始文字列)、対応文字列(終了文字列)には、 対応文字列機能([検索→対応文字列入力」)で使用する対応文字列を設定します。対応文字列の部分は省略可能です。 |
[v3.0 新規] |
GlobalAttribute_InitialState("拡張子", 状態名) |
拡張子に一致するファイルを開いたとき、初期状態を状態名で指定した状態に設定します。 指定した拡張子に一致しない場合は、初期状態は idle になります。拡張子はダブルクオーテーションで囲って記述します。 |
|
GlobalAttribute_StartAlphabet("文字列") |
トークン(単語)の最初の一文字になりうる文字を指定します。 ダブルクオーテーションで囲って記述します。 |
|
GlobalAttribute_ContinuousAlphabet("文字列") |
トークン(単語)の途中の一文字になりうる文字を指定します。 ダブルクオーテーションで囲って記述します。 |
|
GlobalAttribute_ImportRecursive("拡張子") |
拡張子で指定した拡張子を持つファイルをインポートしたとき、 そのファイル内で指定されたインポートファイルも再帰的にインポートします。 |
|
GlobalAttribute_ImportRecursiveAll |
ファイルをインポートしたとき、常に、 そのファイル内で指定されたインポートファイルも再帰的にインポートします。 | |
GlobalAttribute_IdInfoAutoDisplay("文字列") |
文字列で指定した文字を入力したとき、 識別子情報ウインドウに、その直前の識別子の情報を表示します。 | |
GlobalAttribute_IdInfoArgStart("文字列") |
識別子情報内の引数部分の開始文字列を、文字列で指定します。 ダブルクオーテーションで囲って記述します。 |
|
GlobalAttribute_IdInfoArgEnd("文字列") |
識別子情報内の引数部分の終了文字列を、文字列で指定します。 ダブルクオーテーションで囲って記述します。 |
|
GlobalAttribute_IdInfoArgDelimiter("文字列") |
識別子情報内の引数部分の引数区切り文字を、文字列で指定します。 ダブルクオーテーションで囲って記述します。 |
|
GlobalAttribute_ClassString("文字列1","文字列2",...,"文字列n") |
クラス指定するための文字列を指定します。 テキスト内でこの文字の直後で補完入力(省略入力)したとき、その前の単語を親とする識別子だけを候補表示します。 ダブルクオーテーションで囲って記述します。ダブルクオーテーションで囲った文字列をカンマで区切って複数入力可能です。 |
|
GlobalAttribute_InstanceString("文字列1","文字列2",...,"文字列n") |
クラス(インスタンス)指定するための文字列を指定します。 テキスト内でこの文字の直後で補完入力(省略入力)したとき、その前の単語の型名を親とする識別子だけを候補表示します。 ダブルクオーテーションで囲って記述します。ダブルクオーテーションで囲った文字列をカンマで区切って複数入力可能です。 |
|
GlobalAttribute_ImportLinkToProjectAll |
プロジェクト内の全てのファイルをインポートします。 | |
GlobalAttribute_Directive("文字列1","文字列2",...,"文字列n") |
ディレクティブ部分の開始文字列を設定します。 | |
GlobalAttribute_DirectiveIf("文字列1","文字列2",...,"文字列n") |
C言語ディレクティブのifに対応する文字列を設定します。 | |
GlobalAttribute_DirectiveIfdef("文字列1","文字列2",...,"文字列n") |
C言語ディレクティブのifdefに対応する文字列を設定します。 | |
GlobalAttribute_DirectiveIfndef("文字列1","文字列2",...,"文字列n") |
C言語ディレクティブのifndefに対応する文字列を設定します。 | |
GlobalAttribute_DirectiveElse("文字列1","文字列2",...,"文字列n") |
C言語ディレクティブのelseに対応する文字列を設定します。 | |
GlobalAttribute_DirectiveElif("文字列1","文字列2",...,"文字列n") |
C言語ディレクティブのelifに対応する文字列を設定します。 | |
GlobalAttribute_DirectiveEndif("文字列1","文字列2",...,"文字列n") |
C言語ディレクティブのendifに対応する文字列を設定します。 |
state部(状態定義)
state部には状態定義を複数、改行・スペース・タブのいずれかで区切って列記します。
各状態定義は下記の構成です。
state(状態名)
{
StateAttribute部
各状態遷移部
}
初期状態として、状態名がidle
の状態を1つ、必ず定義する必要があります。
StateAttribute部
状態のパラメータを設定します。
下記のパラメータを改行・スペース・タブのいずれかで区切って記述します。
StateAttribute | 説明 | 備考 |
---|---|---|
StateAttribute_ColorSlot(色タイプ番号) |
この状態のテキストを、色タイプ番号で指定した色で色付けします。 | [v3.0 新規] |
StateAttribute_SyntaxPart("文法パート名") |
この状態の文法パートを指定します。 | [v3.0 新規] |
StateAttribute_IgnoreCase |
状態遷移部の一致文字列との比較において、大文字小文字を無視します。 | [v3.0 新規] |
StateAttribute_Stable |
安定状態であることを指定します。テキスト編集時、このパラメータが設定された状態まで戻って文法認識を再度行います。 | |
StateAttribute_Comment |
この状態がコメント状態であることを指定します。 | |
StateAttribute_NotCode |
この状態が本文外であることを指定します。 この部分は括弧の対応チェック機能等の対象外になります。 |
|
StateAttribute_DisableAllCategory |
この状態ではすべてのカテゴリの色づけを無効にします。 | |
StateAttribute_IndentOnTheWay |
行の最初がこの状態だったときは、インデント時、「文の途中(複文)の行」のインデントが適用されます。 (モード設定ウインドウの「インデント」タブを参照) |
|
StateAttribute_NoSpellCheck |
この状態ではスペルチェックを行いません。 | |
StateAttribute_DisableDirective |
この状態ではディレクティブ文字列の認識を行いません。 | |
StateAttribute_AfterParentKeyword |
この状態では、常に直前の単語、または、直前の単語の型名を親キーワードとして補完候補表示を行います。 Objective-Cでのメソッドコールのように、クラス名とメソッドの間に半角スペースしかないような状態で使用します。 |
[v3.0 新規] |
StateAttribute_EnableRecompletion |
この状態では、キーワードをクリック時、同じ親キーワードを持つキーワードを補完候補として表示します。 | [v3.0 新規] |
StateAttribute_DisableIndent |
この状態では、常に自動インデントを無効にします。 | [v3.0 新規] |
下記はバージョン3では使用しなくなりました。指定しても無視されます。
StateAttribute_EnableCategory
StateAttribute_DefaultColor
StateAttribute_DefaultImportColor
StateAttribute_DefaultLocalColor
StateAttribute_DisplayName
StateAttribute_SameStateAs
各状態遷移部
各状態遷移を複数、改行・スペース・タブのいずれかで区切って列記します。
各状態遷移は下記の構成です。
{一致文字列,{状態遷移動作1, 状態遷移動作2, ... , 状態遷移動作n}}
現在の位置に一致文字列が存在していたら、 状態遷移動作1, 状態遷移動作2, ... , 状態遷移動作nを順に実行します。
文字列には、一致文字列をダブルクオーテーションで囲んで指定します。
あるいは、一致文字列には、次の特殊一致文字列を使用することも可能です。
特殊一致文字列 | 説明 | 備考 |
---|---|---|
start |
この状態に遷移したとき、必ず最初に一回だけ一致します。 | |
lineend |
行末に一致します。 | |
default |
他の一致文字列すべてに一致しなかった場合に、実行されます。 | |
regexp"正規表現" |
正規表現に一致します。 | |
heredocumentend |
heredocumentid という名前の変数に入っている文字列に一致します。 |
[v3.0 新規] |
状態遷移動作には下記が使用可能です。
状態制御
状態遷移動作 | 説明 | 備考 |
---|---|---|
ChangeState(状態名) |
状態名で指定した状態へ遷移します。 | |
ChangeStateFromNextChar(状態名) |
状態名で指定した状態へ遷移します。(ChangeState と同じ) |
|
BlockStart(ブロック名) |
ブロック名で指定したブロックを開始します。 次の ChangeStateIfBlockEnd と組み合わせて使います。 |
|
ChangeStateIfBlockEnd(ブロック名,状態名) |
ブロック名で指定した位置で始まるブロックが終了していたら、 状態名で指定した状態へ遷移します。 | |
ChangeStateIfNotAfterAlphabet(状態名) |
直前の文字がアルファベット以外なら、 状態名で指定した状態へ遷移します。 | |
ChangeStateIfTokenEqualVar(変数名,状態名) |
現在のトークンが変数名で指定した変数と同じなら、 状態名で指定した状態へ遷移します。 | |
PushState(状態名) |
現在の状態を保存して、状態名で指定した状態へ遷移します。 保存できる状態は1段階のみです。 |
|
PushStateFromNextLine |
次の行の最初で、現在の状態を保存して、状態名で指定した状態へ遷移します。 保存できる状態は1段階のみです。 |
[v3.0 新規] |
PushStateIfNotAfterAlphabet(状態名) |
直前の文字がアルファベット以外なら、 現在の状態を保存して、状態名で指定した状態へ遷移します。 保存できる状態は1段階のみです。 |
|
PopState |
PushState 等で保存された状態へ状態遷移します。 |
|
PopStateFromNextChar |
PushState 等で保存された状態へ状態遷移します。(PopState と同じ) |
変数制御
状態遷移動作 | 説明 | 備考 |
---|---|---|
SetVarStart(変数名) |
一致文字列の次の文字から、変数名で指定した変数への格納を開始します。 | |
SetVarStartFromNextChar(変数名) |
一致文字列の次の文字から、変数名で指定した変数への格納を開始します。(SetVarStart() と同じ) |
|
SetVarStartAtPrevToken(変数名) |
一致文字列の1つ前のトークンから、変数名で指定した変数への格納を開始します。 | |
SetVarStartOrContinue(変数名) |
一致文字列の次の文字から、変数名で指定した変数への格納を開始します。 前回の開始から連続しているとき(終了していないとき)は、今まで格納した文字列に続けて格納します。 |
|
SetVarWithTokenStack(変数名,トークン相対位置) |
変数名で指定した変数へ、トークン相対位置で指定した位置のトークンを格納します。 トークン相対位置には0以下の整数を指定します。(0が現在位置のトークン) |
|
SetVarWithTokenStack(変数名,トークン相対開始位置,トークン相対終了位置) |
変数名で指定した変数へ、トークン相対開始位置〜トークン相対終了位置のトークンを格納します。 トークン相対位置には0以下の整数を指定します。(0が現在位置のトークン) |
|
SetVarEnd(変数名) |
一致文字列の直前の文字までで、変数名で指定した変数への格納を終了します。 | |
SetVarEndAtNextChar(変数名) |
一致文字列の最後の文字までで、変数名で指定した変数への格納を終了します。 | |
SetVarEndAtPrevToken(変数名) |
一致文字列の直前のトークンまでで、変数名で指定した変数への格納を終了します。 | |
SetVarLastWord(変数名) |
一致文字列より前で、最後の単語(アルファベットで始まるトークン)を、変数名で指定した変数へ格納します。 | |
SetVarCurrentToken(変数名) |
現在のトークンを変数名で指定した変数へ格納します。 | |
SetVarNextToken(変数名) |
次のトークンを(先読みして)、変数名で指定した変数へ格納します。 | [v3.0 新規] |
CatVar(変数名1,変数名2,変数名3) |
変数名1へ、変数名2と変数名2をつなげた文字列を格納します。 | |
SetVar(変数名1,変数名2) |
変数名1へ、変数名2の文字列を格納します。 | |
SetVar(変数名1,"文字列") |
変数名1へ、指定した固定文字列を格納します。 | [v3.0 新規] |
SetVarTypeOfVar(変数名) |
変数名に格納されているキーワードの型名を取得し、型名を変数に格納します。 | [v3.0 新規] |
SetVarRegExpGroup1(変数名) |
一致文字列に正規表現を使用した場合に、正規表現のグループ1に一致した文字列を変数に格納します。 | [v3.0 新規] |
ClearVar(変数名) |
変数名で指定した変数を空にします。 | |
ClearTokenStack |
過去のトークンの記録をクリアします。 この後、 SetVarWithTokenStack 等でクリア済みのトークンを指定したときは、空白文字列となります。 |
インデント制御
状態遷移動作 | 説明 | 備考 |
---|---|---|
IncIndentFromNext |
一致文字列の次の文字から、インデントレベルを+1します。 | |
DecIndentFromNext |
一致文字列の次の文字から、インデントレベルを-1します。 | |
DecIndentFromCurrent |
一致文字列の最初の文字から、インデントレベルを-1します。 | |
DecIndentOnlyCurrent |
現在行のみインデントレベルを-1します。 | |
SetZeroIndentOnlyCurrent |
現在行のみインデント無しにします。 | |
IndentLabel |
現在行をラベル行のインデントにします。 (モード設定ウインドウの「インデント」タブを参照) |
識別子登録
状態遷移動作 | 説明 | 備考 |
---|---|---|
AddGlobalId(カテゴリ名,キーワード,メニュー登録文字列,
識別子情報, 識別子コメント, 親識別子名, 識別子型名[, アウトラインレベル]) |
グローバル識別子(ファイル全体で有効な識別子)を登録します。 カテゴリ名:登録先カテゴリを指定します。カテゴリ名は[ ]で囲って指定します。 キーワード:キーワード名を指定します。キーワードはカテゴリで指定した色で色づけされます。 変数名またはダブルクオーテーションで囲った文字列を記述します。 メニュー登録文字列:見出しメニュー・見出しリストへ登録する文字列を指定します。 変数名またはダブルクオーテーションで囲った文字列を記述します。 空白文字列("")を指定した場合、メニュー登録されません。 識別子情報:識別子情報ウインドウに表示する情報テキストを指定します。 変数名またはダブルクオーテーションで囲った文字列を記述します。 不要な場合は空白文字列("")を指定します。 識別子コメント:識別子情報ウインドウに表示するコメントテキストを指定します。 変数名またはダブルクオーテーションで囲った文字列を記述します。 不要な場合は空白文字列("")を指定します。 親識別子名:親となる識別子名を指定します。 変数名またはダブルクオーテーションで囲った文字列を記述します。 不要な場合は空白文字列("")を指定します。 識別子型名:型名を指定します。 変数名またはダブルクオーテーションで囲った文字列を記述します。 不要な場合は空白文字列("")を指定します。 アウトラインレベル : アウトラインレベル(1〜9)を指定します。省略時は1になります。([v3.0 新規]) |
[v3.0 変更] |
AddLocalId(カテゴリ名,キーワード,
識別子情報, 識別子型名, 対象外文字列リスト) |
ローカル識別子(ファイル内の一部分で有効な識別子)を登録します。 カテゴリ名:登録先カテゴリを指定します。カテゴリ名は[ ]で囲って指定します。 キーワード:キーワード名を指定します。キーワードはカテゴリで指定した色で色づけされます。 変数名またはダブルクオーテーションで囲った文字列を記述します。 識別子情報:識別子情報ウインドウに表示する情報テキストを指定します。 変数名またはダブルクオーテーションで囲った文字列を記述します。 不要な場合は空白文字列("")を指定します。 識別子型名:型名を指定します。 変数名またはダブルクオーテーションで囲った文字列を記述します。 不要な場合は空白文字列("")を指定します。 対象外文字列リスト:キーワード登録しない文字列を指定します。 対象外文字列をカンマで区切って、全体をダブるクオーテーションで囲って指定します。 不要な場合は空白文字列("")を指定します。 |
|
Import(変数名) |
変数名で指定したファイルパスのファイルを、インポートファイルとして認識します。 インポートファイル内のグローバル識別子は、インポート先のファイル上でも色づけされます。 |
その他
状態遷移動作 | 説明 | 備考 |
---|---|---|
EscapeNextChar |
次の文字をエスケープします。(次の文字は無視される。) | |
SyntaxError("エラー文字列") |
行番号エリアにエラーマークを表示します。 | [v3.0 新規] |
SyntaxWarning("ワーニング文字列") |
行番号エリアにワーニングマークを表示します。 | [v3.0 新規] |
cateory部(カテゴリ定義)
category部にはカテゴリを複数、改行・スペース・タブのいずれかで区切って列記します。
各カテゴリは下記の構成です。
category[カテゴリ名]
{
CategoryAttribute部
}
CategoryAttribute | 説明 | 備考 |
---|---|---|
CategoryAttribute_ColorSlot(色タイプ番号) |
このカテゴリのキーワードを、色タイプ番号で指定した色で色付けします。 | [v3.0 新規] |
CategoryAttribute_DisplayName(言語コード,"表示名") |
キーワード情報ウインドウにおいて表示されるカテゴリ名を指定します。 指定しない場合は、category[]で指定したカテゴリ名がそのまま表示されます。 言語コードはこちらを参照して下さい。 |
[v3.0 新規] |
CategoryAttribute_MenuBold |
このカテゴリを見出しメニュー・見出しリストに登録するとき、ボールドで表示します。 |
下記はバージョン3では使用しなくなりました。指定しても無視されます。
CategoryAttribute_DefaultColor
CategoryAttribute_DefaultLocalColor
CategoryAttribute_DefaultImportColor
CategoryAttribute_DefaultKeyword
色タイプ番号
StateAttribute_ColorSlot(色タイプ番号)
、および、
CategoryAttribute_ColorSlot(色タイプ番号)
で指定する色タイプ番号は下記の通りです。
色タイプ番号 | カラースキームファイル/キーワードCSVファイル での記述 | モード設定「色」タブの表記 |
---|---|---|
0 | reserved-word | 0. 予約語 |
1 | method | 1. メソッド/関数 |
2 | property | 2. プロパティ/メンバ |
3 | variable | 3. 変数 |
4 | class | 4. クラス/タイプ |
5 | macro | 5. マクロ |
6 | other1 | 6. その他 1 |
7 | other2 | 7. その他 2 |
32 | comment | コメント |
33 | literal | 文字列 |
言語コード
言語コード | 言語 |
---|---|
0 | 日本語 |
1 | 英語 |
2 | フランス語 |
3 | ドイツ語 |
4 | スペイン語 |
5 | イタリア語 |
6 | オランダ語 |
7 | スウェーデン語 |
8 | ノルウェー語 |
9 | デンマーク語 |
10 | フィンランド語 |
11 | ポルトガル語(ブラジル) |
12 | 中国語簡体字 |
13 | 中国語繁体字 |
14 | 韓国語 |
15 | ポーランド語 |
16 | ポルトガル語(ポルトガル) |
17 | ロシア語 |