文法定義スクリプトについて (スクリプトバージョンv3.0)

文法定義スクリプトを作成することにより、コメント・リテラル部分の色づけだけではなく、 よりそれぞれの言語に合わせた複雑な文法を認識し、色づけや識別子認識をすることができます。

こちらのページにサンプルを置いています。ご参照下さい。

基本

miは文法定義スクリプトで定義された状態遷移に基づいて、テキストを走査し、 テキスト内の各文字に状態を割り付けます。
(この「テキスト」とは文法定義スクリプトのことではなく、文法認識対象のテキストのことです。)

そして、各状態に色を付けたり、状態遷移時に識別子を登録したりすることが出来ます。

テキストの走査

miは、テキストをトークン毎に読み進めます。
テキストの現在位置以降の文字列が、スクリプトに記述された一致文字列に一致した場合、状態遷移を行います。

トークン

トークンとは、単語、もしくは、記号一文字です。
単語を構成する文字は、以下のいずれかの方法で設定します。

基本文法

全体構成

文法定義スクリプトは下記の3パートに分かれています。

  1. GlobalAttribute部(全体的なパラメータの設定)
  2. state部(状態定義)
  3. category部(カテゴリ定義)

文法パート

HTML文書内のCSSパート、JavaScriptパートなど、1つのドキュメント内で複数の「文法パート」を設定し、 キーワードをそれぞれのパート内のみで有効にしたり、単語構成文字をパート毎に設定したりすることができます。

互換性

旧バージョン用の文法定義スクリプトは、新しいバージョンでも読み込むことができます。

ただし、バージョン3でカラースキーム機能に対応した関係上、 バージョン2用の文法定義スクリプトをバージョン3で読み込むと、色が正しく表示されません。
下記の修正をお願いします。

色タイプ番号色タイプ番号の節を参照下さい。

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では使用しなくなりました。指定しても無視されます。

各状態遷移部

各状態遷移を複数、改行・スペース・タブのいずれかで区切って列記します。
各状態遷移は下記の構成です。

{一致文字列,{状態遷移動作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では使用しなくなりました。指定しても無視されます。

色タイプ番号

StateAttribute_ColorSlot(色タイプ番号)、および、 CategoryAttribute_ColorSlot(色タイプ番号) で指定する色タイプ番号は下記の通りです。

色タイプ番号カラースキームファイル/キーワードCSVファイル
での記述
モード設定「色」タブの表記
0reserved-word0. 予約語
1method1. メソッド/関数
2property2. プロパティ/メンバ
3variable3. 変数
4class4. クラス/タイプ
5macro5. マクロ
6other16. その他 1
7other27. その他 2
32commentコメント
33literal文字列

言語コード

言語コード言語
0日本語
1英語
2フランス語
3ドイツ語
4スペイン語
5イタリア語
6オランダ語
7スウェーデン語
8ノルウェー語
9デンマーク語
10フィンランド語
11ポルトガル語(ブラジル)
12中国語簡体字
13中国語繁体字
14韓国語
15ポーランド語
16ポルトガル語(ポルトガル)
17ロシア語