emuera (1-8-2-4) | 2019-01-27 00:29 |
emuera - etc 関連ファイル (1-8-2-1) | 2015-11-04 01:04 |
emuera - source ソースコード (1-8-2-4) | 2019-01-27 00:32 |
ERBフォルダの中には拡張子ERBのファイルのほか、拡張子ERHのファイルを置くことができます。
ERHファイルにはERBより先に処理すべき内容を記載します。
具体的には#DIM及び#DIMSによる広域変数の定義と#DEFINEによるマクロの定義です。
ヘッダー中に#DIM、#DIMSと#DEFINE以外の行を書いてはいけません。
EmueraはERBフォルダ内に置かれた*.ERHを全て読んでいきます。
処理順はcsvフォルダ内のファイル→*.ERH→*.ERBの順なのでERHの効果はCSVフォルダ内の記述には及びません。
逆に、_rename.csvによる置換は*.ERHにも適用されます。
eramakerEXは*.ERHには_rename.csvを適用しないため、ERHファイルを用いるとeramakerEXとの互換性は失われます。
※ユーザー定義の変数も参照してください。
ヘッダーファイルでは新しい変数を宣言することができます。
これはERB中で宣言するプライベート変数とは異なり、ERB中の全ての箇所から参照できる広域変数になります。
プライベート変数とは異なりDYNAMIC、STATICの区別はなく、REFを用いた参照型変数を宣言することもできませんが、CONSTを用いた定数は同様に宣言できます。
宣言できる変数は3次元変数までを宣言することができます。
要素数を指定しない場合、要素数1の配列になるので非配列変数のように使うこともできます。
変数宣言は以下のように#DIM又は#DIMSにより行います。
なお、#DIM HOGE,1,2のようにすると二次元配列になります。
<*.ERH> #DIM MY_INT #DIM MY_INT_ARRAY, 100 #DIMS MY_STR #DIMS MY_STR_ARRAY, 100ERH中で上のように定義しておくことで、ERB中では
<*.ERB> MY_INT = 100 MY_INT_ARRAY:10 = MY_INT_ARRAY:10 + 45 MY_STR = あああ PRINTFORML {MY_INT_ARRAY:10} %MY_STR%のように変数として使用できます。
変数宣言時にSAVEDATAキーワードを加えることでセーブされる変数が宣言できます。
ただしSAVEDATAキーワードを用いてセーブ可能な多次元変数を宣言する場合、オプション「セーブデータをバイナリ形式で保存する」が有効になっている必要があります。
<*.ERH> #DIM SAVEDATA MY_INT_ARRAY, 100 #DIMS SAVEDATA MY_STR_ARRAY, 100このように宣言することでMY_INT_ARRAY、MY_STR_ARRAYの内容はDAYやMONEYなどの既存変数と同様にセーブされロードされます。
変数宣言時にCHARADATAキーワードを加えることでキャラクタ変数が宣言できます。
CHARADATAはSAVEDATAキーワードと同時に使用することができます。
<*.ERH> #DIM CHARADATA C_INT_ARRAY, 100 #DIMS CHARADATA C_STR_ARRAY, 100 #DIM CHARADATA SAVEDATA CS_INT_ARRAY, 100上の例ではC_INT_ARRAY、C_STR_ARRAYはキャラクタ変数ですがセーブロードはされません。
変数宣言時にGLOBALキーワードを加えることでグローバル変数が宣言できます。
GLOBALはSAVEDATAキーワードと同時に使用することができます。
<*.ERH> #DIM GLOBAL G_INT_ARRAY, 100 #DIMS GLOBAL G_STR_ARRAY, 100 #DIM GLOBAL SAVEDATA GS_INT_ARRAY, 100グローバル変数は通常のセーブロード時にはロードも初期化もされません。
その他、初期値や定数化などの詳細はユーザー定義の変数を参照してください。
ここでいうマクロとはERBコード中の文字列を、あらかじめ定義した別の文字列へ置換する機能です。
マクロと名前は付いていますがEmueraの実行中にF1~F12キーで使えるキーボードマクロとは関係ありません。
この機能はCやC++の#defineを参考に作られています。
ERHファイル中でマクロを定義することで全てのERBファイル内のコードに適用されます。
マクロは典型的には以下のように定義します。
<*.ERH> #DEFINE <置換元識別子> <置換先式>これでERB中で<置換元識別子>が<置換先式>に置換されます。 例えば、.ERH中で
<*.ERH> #DEFINE FIVE 5と定義しておくと、.ERB中のFIVEという文字列が5に置換されます。 例えば
<*.ERB> X = FIVEは
(展開後) X = 5と展開されます。
<*.ERH> #DEFINE FIVE 5 ;コメント <*.ERB> X = FIVE + FIVE (展開後) X = 5 + 5
<*.ERH> #DEFINE SIX 1 + 5 #DEFINE NINE 8 + 1 <*.ERB> X = SIX * NINEはXに6*9、すなわち36が代入されると思うかもしれませんが、実際には
(展開後) X = 1 + 5 * 8 + 1と展開されるので掛け算が優先されて X = 42 になります。
<*.ERH> #DEFINE HOGE "ほげほげ" #DEFINE PIYO A #DEFINE FUGA DA:10 #DEFINE HOGERA LOCAL + MY_FUNC(X, Y) <*.ERB> X = STRLEN(HOGE) Y = PIYO + 5 FUGA:20 += PIYO LOCAL = HOGERA @MY_FUNC(ARG, ARG:1) #FUNCTION ~略~ (展開後) X = STRLEN("ほげほげ") Y = A + 5 DA:10:20 += A LOCAL = LOCAL + MY_FUNC(X, Y) @MY_FUNC(ARG, ARG:1) #FUNCTION ~略~
<*.ERH> #DEFINE PLUS + #DEFINE FIVEPLUS 5 + <*.ERB> X = 1 PLUS 2 Y = FIVEPLUS 2 (展開後) X = 1 + 2 Y = 5 + 2
マクロを含むマクロを定義することができます。
そのようなマクロはERBのロード時にマクロが適用できなくなるまで多重展開されます。
<.ERH> #DEFINE FIVE_1 5 #DEFINE FIVE_2 FIVE_1 + FIVE_1 #DEFINE FIVE_3 FIVE_2 + FIVE_2 <.ERB> X = FIVE_3 (展開後) X = 5 + 5 + 5 + 5展開を一定回数繰り返してもマクロが残っている場合、Emueraは自己参照又は循環参照マクロの疑いありとして処理を打ち切り、エラー終了します。
<.ERH> #DEFINE HOGE HOGE #DEFINE PIYO FUGA + 1 #DEFINE FUGA PIYO + 2 <.ERB> ;エラーになる X = HOGE Y = PIYO
ある名称のマクロが定義されているかどうかによって複数の行を実行するかどうか、分岐することができます。
[IF XXX]行と[ENDIF]行の間の行はXXXがDEFINEされている場合のみ実行されます。
例えば以下のように使います
<*.ERB> [IF HOGE] PRINTL HOGEが定義されている [ELSEIF PUYO] PRINTL HOGEが定義されていない PRINTL PUYOが定義されている [ELSE] PRINTL HOGEもPUYOも定義されていない [ENDIF]
この目的のため、空のマクロ(置換先のないマクロ)も定義できます。
<*.ERH> #DEFINE HOGE
マクロが展開されるのは基本的に式中のみです。
<*.ERH> #DEFINE FIVE 5 <*.ERB> PRINT FIVEは単に"FIVE"の文字がPRINTされるだけです。
<*.ERH> ;エラーになる #DEFINE HOGE = #DEFINE PUGE X = 1マクロの置換先は式の部分でも可能だと書きましたが、括弧の対応だけはマクロの中で完結している必要があります。 以下のマクロ定義はエラーになります。
<*.ERH> ;エラーになる #DEFINE HOGE ( X + #DEFINE PUGE Y ) <*.ERB> Z = HOGE PUGE
<*.ERH> #DEFINE MY_PRINTL PRINTL <*.ERB> MY_PRINTL これはPRINTLです (展開後) ;エラーになる
<*.ERH> #DEFINE HOGE MY_INT #DEFINE FIVE 5 <*.ERB> @FUNC #DIM HOGE, FIVE HOGE:0 = 10 (展開後) @FUNC #DIM MY_INT, 5 MY_INT:0 = 10のように展開されるので正常に動作します。
[PageInfo]
LastUpdate: 2015-07-14 17:03:47, ModifiedBy: minorshift
[Permissions]
view:all, edit:login users, delete/config:members