地道にヤルしかないんじゃないかと。
-----↓以下↓-----
// TAB=4
// 実行には PPA.DLL が必須です。sakura.exe と同じフォルダに ppa.dll を入れておいてください。
// マクロファイルの拡張子は .PPA でなくてはなりません。
var // 変数を確保する場所
NewPath:String;
FullPath:String;
PDir,Dir,Fname,Ext:String;
pt:Integer; // 整数数値変数
NL:String;
begin // ここより処理内容 //{
// ↓改行を用意
NL := '
';
FullPath := S_GetFilename(); // 編集中のファイル名を取得する
// フルパスファイル名(FullPath)をディレクトリ(Dir)とファイル名(Fname)に分離する。
Fname := FullPath;
Dir := '';
repeat //{
pt := Pos( '\' , Fname );
if( pt > 0 ) then begin
Dir := Dir + Copy ( Fname , 1 , pt );
Fname := Delete( Fname , 1 , pt );
end;
until ( pt <= 0 ); //}
// ディレクトリ(Dir)を親ディレクトリ(PDir)とディレクトリ(Dir)に分離する。
if ( Length(Dir) > 3 ) then Dir := Delete(Dir,Length(Dir),1);
PDir := '';
repeat //{
pt := Pos( '\' , Dir );
if( pt > 0 ) then begin
PDir := PDir + Copy ( Dir , 1 , pt );
Dir := Delete( Dir , 1 , pt );
end;
until ( pt <= 0 ); //}
// ファイル名(Fname)をファイル名(Fname)と拡張子(Ext)に分離する。
Ext := Fname;
Fname := '';
repeat //{
pt := Pos( '.' , Ext );
if( pt > 0 ) then begin
Fname := Fname + Copy ( Ext , 1 , pt );
Ext := Delete( Ext , 1 , pt );
end;
until ( pt <= 0 ); //}
if (Fname = '') then begin //{
Fname :=Ext;
Ext := '';
end; //}
// 拡張子毎に、新たに開くファイルのフルパスを生成する
NewPath := '';
Ext := UpperCase(Ext);
if (Ext = 'C') or (Ext = 'CPP') then NewPath := PDir + 'include\' + Fname + 'H'
else if (Ext = 'H') then NewPath := PDir + 'src\' + Fname + 'C'
;
// // ↓for デバッグ
// MessageBox(
// '[' + NewPath + ']' + NL +
// '[' + FullPath + ']' + NL +
// '[' + PDir + ']' + NL +
// '[' + Dir + ']' + NL +
// '[' + Fname + ']' + NL +
// '[' + Ext + ']' + NL +
// '' , '確認' , 0 );
// NewPath が空で無ければ開く
if (NewPath <> '') then S_FileOpen(NewPath);
end; //}