[fpc-pascal] Generating templates with FPTemplate
Luciano de Souza
luchyanus at gmail.com
Fri Jul 27 14:14:31 CEST 2012
Michael,
Your example is very clear. I am not very good to understand source
codes. But this style seems to be very good and logical.
It's really wonderful: FPC owns units for everything!
Thank you.
On 27/7/2012 08:43, michael.vancanneyt at wisa.be wrote:
>
>
> On Fri, 27 Jul 2012, luciano de souza wrote:
>
>> Hello all,
>>
>> I am trying to create an example with the FPTemplate unit. Firstly, I
>> wrote a hypothetical unit template.
>
> [snip]
>
>>
>> I am not successful in filling up the template. If I do
>> writeln(source.template), the answer is an empty string. If I do
>> writeln(source.GetContent), the answer is the template without the
>> needed replacements.
>>
>> So I ask: what is wrong? How can I get a file, to replace tags and to
>> get a replaced string?
>
> 1. You need only one of the two classes, never both at the same time.
> 2. You need to set the correct delimiters. Default are { and }
>
> If you want to have fixed values for parameters, the easiest is
> TTemplateParser. TFPCustomTemplate (or TFPTemplate) does not have
> fixed values, everything is event driven.
>
> So, the following will do what you want:
>
> program e30;
>
> {$mode objfpc}{$H+}
>
> uses
> fptemplate, classes;
>
> var
> T : TTemplateParser;
> Fin,Fout : TFileStream;
>
> BEGIN
> T := TTemplateParser.create;
> try
> T.StartDelimiter:='<#';
> T.EndDelimiter:='>';
> T.values['name'] := 'freevox';
> T.values['modules'] := 'sysutils, classes';
> T.AllowTagParams:=False;
> Fin:=TFileStream.Create('e30.txt',fmOpenRead);
> try
> Fout:=TFileStream.Create('freevox.pas',fmCreate);
> try
> T.ParseStream(fin,fout);
> finally
> Fout.Free;
> end;
> finally
> Fin.Free;
> end;
> finally
> T.free;
> end;
> end.
>
> Running this produces the file you want:
>
> fsb: >e30
> fsb: >cat freevox.pas
> unit freevox;
> {$mode objfpc}{$H+}
>
> interface
> uses
> sysutils, classes
>
> implementation
>
> end.
>
> That's it.
>
> In revision 21977, I added a ParseFiles call, which makes the program
> even
> easier:
>
> program e30;
>
> {$mode objfpc}{$H+}
>
> uses
> fptemplate, classes;
>
> var
> T : TTemplateParser;
>
> BEGIN
> T := TTemplateParser.create;
> try
> T.StartDelimiter:='<#';
> T.EndDelimiter:='>';
> T.values['name'] := 'freevox';
> T.values['modules'] := 'sysutils, classes';
> T.AllowTagParams:=False;
> T.ParseFiles('e30.txt','freevox.pas');
> finally
> T.free;
> end;
> end.
>
> Michael.
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list