Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Objective-C builtin template system?

I am developing an iPhone application and I use HTML to display formatted text.

I often display the same webpage, but with a different content. I would like to use a template HTML file, and then fill it with my different values.

I wonder if Objective-C has a template system similar to ERB in Ruby.

That would allow to do things like

Template:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>{{{title}}}</H1>
    <P>{{{content}}}</P>
  </BODY>
</HTML>

Objective-C (or what it may be in an ideal world)

Template* template = [[Template alloc] initWithFile:@"my_template.tpl"];
[template fillMarker:@"title" withContent:@"My Title"];
[template fillMarker:@"content" withContent:@"My text here"];
[template process];
NSString* result = [template result];
[template release];

And the result string would contain:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>My Title</H1>
    <P>My text here</P>
  </BODY>
</HTML>

The above example could be achieved with some text replacement, but that would be a pain to maintain. I would also need something like loops inside templates. For instance, if I have multiple items to display, I would like to generate multiple divs.

Thanks for reading :)

like image 683
NewbiZ Avatar asked Mar 29 '10 16:03

NewbiZ


4 Answers

Have you considered using as template:

<HTML>
  <HEAD>
  </HEAD>
  <BODY>
    <H1>%@</H1>
    <P>%@</P>
  </BODY>
</HTML>

And then:

// just to get file name right
NSString* fn = 
    [NSString stringWithFormat:@"%@/my_template.tpl", 
              [[ NSBundle mainBundle ] resourcePath ]];
// template
NSError *error;
NSString* template = 
    [NSString stringWithContentsOfFile:fn 
              encoding:NSUTF8StringEncoding error:&error];
// result
NSString* result = 
    [NSString stringWithFormat:template, 
              @"MyTitle", 
              @"MyText"];

I think it's pretty much what you want.

Of course you'll have to add your template files as resources in the project.

like image 78
Pablo Santa Cruz Avatar answered Nov 18 '22 18:11

Pablo Santa Cruz


https://github.com/groue/GRMustache may help you.

like image 36
Gwendal Roué Avatar answered Nov 18 '22 20:11

Gwendal Roué


No, Objective-C has no built-in template system. Generally for simple uses you'd just use textual replacement (possibly via stringWithFormat:) and for something more advanced you'd choose a full-fledged template system that suits your needs.

like image 2
Chuck Avatar answered Nov 18 '22 20:11

Chuck


This works for me: http://mattgemmell.com/2008/05/20/mgtemplateengine-templates-with-cocoa/

like image 2
Michal Avatar answered Nov 18 '22 19:11

Michal