Title: 秀丸エディタのマクロで#include を可能にするマクロ

注意

このマクロの旧バージョン(Version.1.0.2 より前)を使用していた場合、
マクロを上書きしただけでは動作しません。
このバージョンより、マクロファイル名の受け渡しに、秀丸エディタ
Ver.8より追加されている機能を使用している為、マクロ起動部分が
変更になっています。

旧バージョン
  writeinistr "hme_include.mac", "setting","filename",currentmacrofilename;
  execmacro   "hme_include.mac"; endmacro;

現バージョン(Version.1.1.0以降)
  execmacro "hme_include.mac", currentmacrofilename ; endmacro;

その為、マクロ起動部分の書き換えが必要になります。

1 はじめに

マクロを作る人向けのマクロです。 このマクロは、名前の通り、C言語のプリプロセッサの様に、外部ファイルを参照する機能("#include")を提供します。

要は、別ファイルで作成・管理しているサブルーチンを、実行時にファイルから読み込み合成して実行する、 ちょっと強引なマクロです。

Version.1.1.0 より、秀丸エディタVer.8以降が必要です。Ver.7では実行できません。

2 実行するマクロへの追加方法

このマクロを使用する場合、編集するマクロは以下の構成になります

┌──────────────────┐
│hme_include.macの起動部分           │
│  hme_include.macを実行             │
┣━━━━━━━━━━━━━━━━━━┫
┃実際のマクロ                        ┃
┗━━━━━━━━━━━━━━━━━━┛

実際に実行するマクロは以下の構成になります。("hme_include.macの起動部"は削除します)

┌──────────────────┐
│ヘッダ(取り込むファイル名)          │
┣━━━━━━━━━━━━━━━━━━┫
┃実際のマクロ                        ┃
┣━━━━━━━━━━━━━━━━━━┫
│#includeで指定されたファイル1      │
│#includeで指定されたファイル2      │
└──────────────────┘

2.1 #include宣言部

取り込みたいファイルを、"#include"を使用し、指定します。 そのまま指定すると、マクロ実行時にエラーになるので、コメントの状態で記入してください。 "include"は小文字で指定すること。 指定されたファイルは、"include"の位置ではなく、マクロの最後に追加されます。

例1)複数行コメントの場合

 /*
 #include <ファイル名1>
 #include <ファイル名2>
 */

例2)通常のコメントの場合

 //#include <ファイル名1>
 //#include <ファイル名2>

フルパスでない場合は、囲む文字に応じて、フォルダ名を自動的に補完します。 ファイル名を囲む文字が「<>」の場合は macrodir、 「""」の場合は、実行するマクロのあるフォルダを補完します。

2.2 hme_include.macの起動部分

合成するマクロ名を指定し、"hme_include.mac"を起動します。 具体的には、マクロの先頭部分に、以下の1行を追加します。

execmacro   macrodir + "\\hme_include.mac",currentmacrofilename; endmacro;
            =============================

変更する必要があるのは、「macrodir + "\\hme_include.mac"」の部分です。 この部分を、"hme_include.mac"を配置した、フォルダにする必要があります。

呼び出されるマクロに引数を渡す場合には、以下のようにしてください。

execmacro   macrodir + "\\hme_include.mac",currentmacrofilename, str(argcount), getarg(0), getarg(1), …, getarg(29); endmacro;
            =================================================================== ------------------------------------============
            ここまでは固定                                                      必要な引数の最大数まで設定          固定

引数の最大は31個ですが、このマクロで2個使用している為、最大は29個になります。

2.2.1 マクロの例

簡単なマクロの例です。3個のファイルを合成します。サブルーチンなので、変数の書き換えも可能です。

メインのマクロ(_include.mac)

/*
    	#include <_test1.mac>
*/
//	#include "_test2.mac"
//実際は下の行を実行してマクロは終了。
execmacro macrodir + "\\hme_include.mac",currentmacrofilename; endmacro;

//以降、このファイルでは実行しない。
$filename = filename;
//_test.macにあるサブルーチン
message $filename;
call testinclude1 $filename;
message $$return;
//_test2.macにあるサブルーチン
call testinclude2 $filename;
message $$return;
endmacro;

呼び出すマクロその1(_test1.mac)

testinclude1:
    $$a = $$1;
    $$a = $$a + "\ntestinclude1";
    $filename = "_test1.macで変更";
return $$a;

呼び出すマクロその2(_test1.mac)

testinclude2:
    $$a = $$1;
    $$a = $$a + "\ntestinclude2";
return $$a;

実際に実行するマクロ(~_include.mac)

/*
hme_include.mac:3
フルパス\_include.mac
フルパス\_test1.mac
フルパス\_test2.mac
*/
/*
    	#include <_test1.mac>
*/
//	#include "_test2.mac"
//実際は下の行を実行してマクロは終了。


//以降、このファイルでは実行しない。
$filename = filename;
//_test.macにあるサブルーチン
message $filename;
call testinclude1 $filename;
message $$return;
//_test2.macにあるサブルーチン
call testinclude2 $filename;
message $$return;
endmacro;

endmacro;
// include --> _test1.mac
testinclude1:
	$$a = $$1;
	$$a = $$a + "\ntestinclude1";
	$filename = "_test1.macで変更";
return $$a;

// include --> _test2.mac
testinclude2:
	$$a = $$1;
	$$a = $$a + "\ntestinclude2";
return $$a;

2.3 実際に実行するマクロ

合成したファイルは、実行したマクロと同じ場所に、ファイル名の先頭に"~"が追加された名前で作成されます。 同名のファイルがある場合は、無条件で上書きされます。

3 注意事項

4 その他

5 連絡先

6 改版履歴

2007/04/30 Version.1.0.0
2007/05/06
2008/04/30 Version.1.0.2
2010/03/07 Version.1.1.0
2013/11/10 Version.2.0.0
2014/11/24 Version.2.1.0