Подскажите пжст, есть где нибудь хорошая  реализация макросов на 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