変換関数のライフサイクル

コンパイルエンジンの内部はそれぞれのフェーズに応じた処理クラスが定義されており、変換処理が実行されると以下の順序で処理を実行していきます。

また、各処理は前処理、本処理、後処理の3ブロックに分割されており、それぞれの処理後にモジュールに定義した割込関数を呼び出すことができます。

分割関数

分割関数はモジュールのsplitFuncsにタグ名をキーとした関数オブジェクトとして定義します。

module.splitFuncs['choice_h'] = function(text, tag) {
	var arrayArgs = {};
	var args = this.getCommandArgs(text, arrayArgs);
	var temp = {
		labels: arrayArgs.label
	};

	if (args.cancel !== undefined) temp.cancel = args.cancel;

	this.addData(tag, temp);
};

分割関数の仕様は以下の通りです。

引数

戻り値

ありません。

渡されたコマンド文字列を解析結果としてエンジンに引き渡す場合はSplitterクラスのaddDataメソッドを呼び出します。
addDataメソッドの仕様は以下の通りです。

引数

戻り値

ありません。

バリデーション定義

バリデーション定義はモジュールのvalidatesに、タグ名をキーにしたオブジェクトとして定義します。

module.validates['scroll_h'] = {
	speed: {
		notEmpty: [],
		isNumeric: [1, 8]
	},
	noskip: {
		isBool: []
	}
};

定義オブジェクトのフィールドには、タグパラメータの名称を指定します。フィールドはタグパラメータの制約条件を定義し、制約名をキー、値に制約へ渡すパラメータの配列を指定します。
上記の例では、scroll_hタグはspeed、noskipにそれぞれ制約条件を保持しており、speedは空文字の入力不可で、かつ1~8までの数値を指定する必要があります。

エンジン標準の制約条件には以下が定義されています。

バリデーション関数

バリデーション関数はモジュールのvalidateFuncsに、制約名をキーとした関数オブジェクトとして定義します。

module.validateFuncs['varCheck'] = function(vargs, paramName, params) {
	if (params[paramName] == null) return;

	var $ = params[paramName].match(vargs[0]);

	// 変数指定ではない
	if ($ == null) return;

	if ($[vargs[1]] != null) {
		if (parseInt($[vargs[2]], 0) == 0) {
			throw new Tes.ValidateError(
				'[' + paramName + '] : 「0」が使われました。',
				'validator.zeroCheck.error',
				[paramName]
			);
		}
	}
};

バリデーション関数の仕様は以下の通りです。

引数

戻り値

ありません。

バリデーションのエラー発生時は、Tes.ValidateErrorをthrowしてください。
コンパイルエンジン上で文法エラーとして処理されます。

変換関数

変換関数はモジュールのconvertFuncsにタグ名をキーとした関数オブジェクトとして定義します。

module.convertFuncs['input_num'] = function(args) {
	return {
		code: 103,
		indent: this._indent,
		parameters: [
			parseInt(args['var'], 10),
			parseInt(args['num'], 10)
		]
	};
};

変換関数の仕様は以下の通りです。

引数

戻り値

イベントデータのオブジェクトです。
オブジェクトのフィールドはすべて必須です。

割込関数

割込関数はモジュールの下記のフィールドに処理フェーズ名をキーにした関数オブジェクトとして定義します。

処理フェーズは以下のキーを指定します。

module.postProcessors['converter'] = function() {
	// この処理は変換処理の後処理として呼ばれる
};

割込関数の引数、戻り値はありません。
関数上では各処理クラスのインスタンスがthisとして参照することが可能です。