[stringtemplate-interest] Angel brackets and HTML/XML

Leo R. Lundgren leo at finalresort.org
Sun Mar 7 14:14:15 PST 2010


I found the anser to why <!DOCTYPE ...> gave an error. It is obviously  
because of the comment syntax in ST (<! .. !>).

I did find another thing that is missing in the Five Minute  
Introduction, namely the <(expr)(argument-list)>. It's not in the list  
of expressions. Maybe it could be added at the same time that the text  
regarding which delimiter type is default in ST is adjusted.

However, I am still getting "problem parsing template 'index'", when  
the template I try to use is:

\<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd 
">

<html lang="sv-SE">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>Test</title>
	</head>
	<body>
		<h2>Hello <name></h2>
		<button id="uploadButton">Upload file</button>
	</body>
</html>

(I added the \ before the DOCTYPE in order to stop the previously  
mentioned error.)

After some further testing I presume that it's simply not viable to  
use <..> for HTML/XML templates. It seems that ST tries to parse all  
tags, and leaves them blank when then it doesn't find a valid attribute.

Thanks,

// Leo


7 mar 2010 kl. 16.17 skrev Leo R. Lundgren:

> Hello,
>
> I just started trying out ST and it seems really nice. But I
> encountered an issue when using <..> as delimiters in a HTML template.
> I've been searching and reading but can't find a clear explanation as
> to why this is happening, and if there is a workaround.
>
>
> In short; my template looks like this:
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd
> ">
>
> <html lang="sv-SE">
> 	<head>
> 		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
> 		<title>Test</title>
> 	</head>
> 	<body>
> 		<h2>Hello <name></h2>
> 		<button id="uploadButton">Upload file</button>
> 	</body>
> </html>
>
>
> And my Java code like this:
>
> 	protected void doGet(HttpServletRequest request, HttpServletResponse
> response) throws ServletException, IOException {
> 	    String templatePath = getServletContext().getRealPath("/WEB-INF/
> view");
> 	    StringTemplateGroup group =  new StringTemplateGroup("view",
> templatePath, AngleBracketTemplateLexer.class);
> 	    group.setRefreshInterval(0);
>
> 	    StringTemplate view = group.getInstanceOf("index");
> 		view.setAttribute("name", "World");
>
> 		PrintWriter out = response.getWriter();
> 		out.write(view.toString());
> 	}
>
>
> When requesting the page, i get this exception:
>
> problem parsing template 'index'
> line 12:6: expecting '!', found 'l'
> 	at
> org
> .antlr
> .stringtemplate
> .language
> .AngleBracketTemplateLexer.nextToken(AngleBracketTemplateLexer.java: 
> 149)
> 	at antlr.TokenBuffer.fill(TokenBuffer.java:69)
> 	at antlr.TokenBuffer.LA(TokenBuffer.java:80)
> 	at antlr.LLkParser.LA(LLkParser.java:52)
> 	at
> org
> .antlr
> .stringtemplate.language.TemplateParser.template(TemplateParser.java:
> 103)
> 	at
> org
> .antlr
> .stringtemplate
> .StringTemplate.breakTemplateIntoChunks(StringTemplate.java:850)
> 	at
> org
> .antlr.stringtemplate.StringTemplate.setTemplate(StringTemplate.java:
> 441)
> 	at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.defineTemplate(StringTemplateGroup.java:679)
> 	at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.loadTemplate(StringTemplateGroup.java:553)
> 	at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.loadTemplate(StringTemplateGroup.java:629)
> 	at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup
> .loadTemplateFromBeneathRootDirOrCLASSPATH(StringTemplateGroup.java: 
> 597)
> 	at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.lookupTemplate(StringTemplateGroup.java:480)
> 	at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.getInstanceOf(StringTemplateGroup.java:392)
> 	at
> org
> .antlr
> .stringtemplate
> .StringTemplateGroup.getInstanceOf(StringTemplateGroup.java:404)
> 	...
>
>
> Apparently the problem is the first line in the template, where
> there's a ! in the first tag.
> But even if I remove the ! (not valid, I know, just for testing) I get
> the parsing error (only the "problem parsing template 'index'" message
> and stacktrace).
> If I remove everything above the <h2> line, I get output.
> In any case, if I use $$ notation instead of <..>, everything works.
>
> So, is possible to use <..> when making HTML or XML templates, without
> getting errors like this, or is it not recommended?
>
> The reason I'm even considering <..> is because the Five Minute
> Introduction says they are the standard delimiters since version 2.3.
> However, on the "Setting the expression delimiters" page in the wiki,
> it says the opposite.
> It seems to me that the latter is correct, can someone verify?
>
> In any case, I think <..> looks slightly cleaner than $$ all over the
> place, but it certianly does clash with the tags in general, so maybe
> it's better to skip them.



More information about the stringtemplate-interest mailing list