Подскажите пжст, есть где нибудь хорошая реализация макросов на fpc?
Имеется ввиду что то типа Лазарусной подстановки в путях вместо шаблонов вида $(LazarusDir) фактических значений
Утянул бы лазарусную, но смущает зависимость от иде
Модератор: Модераторы
program Project1;
uses
MacroIntf,TransferMacros,MacroDefIntf;//From lazarus ide
type
TMacroMethods=class
function MacroFuncCurrentCPU (const {%H-}Param: string; const Data: PtrInt;
var {%H-}Abort: boolean): string;
function MacroFuncCurrentOS (const {%H-}Param: string; const Data: PtrInt;
var {%H-}Abort: boolean): string;
function MacroFuncYourOwnMacro(const {%H-}Param: string; const Data: PtrInt;
var {%H-}Abort: boolean): string;
end;
function TMacroMethods.MacroFuncCurrentCPU(const Param: string;
const Data: PtrInt; var Abort: boolean): string;
begin
Result:={$I %FPCTARGETCPU%};
end;
function TMacroMethods.MacroFuncCurrentOS(const Param: string;
const Data: PtrInt; var Abort: boolean): string;
begin
Result:={$I %FPCTARGETOS%};
end;
function TMacroMethods.MacroFuncYourOwnMacro(const Param: string;
const Data: PtrInt; var Abort: boolean): string;
begin
Result:='hehe!!!';
end;
var
DefaultMacroMethods:TMacroMethods;
S:string;
begin
GlobalMacroList:=TTransferMacroList.Create;
GlobalMacroList.Add(TTransferMacro.Create('CPU','',
'CPU',@DefaultMacroMethods.MacroFuncCurrentCPU,[]));
GlobalMacroList.Add(TTransferMacro.Create('OS','',
'OS',@DefaultMacroMethods.MacroFuncCurrentOS,[]));
GlobalMacroList.Add(TTransferMacro.Create('YourOwn','',
'YourOwn',@DefaultMacroMethods.MacroFuncYourOwnMacro,[]));
s:='It was on $(CPU) under $(OS). $(YourOwn)';
writeln(s);
GlobalMacroList.SubstituteStr(s);
writeln(s);
readln;
end.
It was on $(CPU) under $(OS). $(YourOwn)
It was on i386 under Win32. hehe!!!
zub писал(а):Нужен именно вызов процедур для замены, а не просто замена текста на текст и тонкая настройка оформления шаблонов чтоб можно было и $(YourOwn) и %YourOwn% сделать, также очень желательна шаблонизация для передачи параметров в процедуры замены чтоб именно конкретный тип, а не безликий const Data: PtrInt
QTemplate['mod']:=@QTemplateMod;
function QTemplateMod(const ATag: String; AParams: TStringList
): String;
begin
... ...
Result:='this text will be inserted instead the tag ${+mod...+}. You can use ATag and Params'; // ATag - это метка по которому была вызвана эта процедура, AParams - это параметры вызова этой процедуры из шаблона
... ...
end;
${+mod+}
${+list
[-entity=<td>$entity</td>-]
[-header=<table>-]
[-footer=</table>-]
+}
Вернуться в Сторонние средства
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1