/*
* The new string needs to be parsed since the text has been dynamically generated.
*/
String templateName = context.getCurrentTemplateName();
SimpleNode nodeTree = null;
try
{
nodeTree = rsvc.parse(new StringReader(sourceText), templateName, false);
}
catch (ParseException pex)
{
// use the line/column from the template
Info info = new Info( templateName, node.getLine(), node.getColumn() );
throw new ParseErrorException( pex.getMessage(), info );
}
catch (TemplateInitException pex)
{
Info info = new Info( templateName, node.getLine(), node.getColumn() );
throw new ParseErrorException( pex.getMessage(), info );
}
/*
* now we want to init and render. Chain the context
* to prevent any changes to the current context.
*/
if (nodeTree != null)
{
InternalContextAdapter ica = new EvaluateContext(context, rsvc);
ica.pushCurrentTemplateName( templateName );
try
{
try
{
nodeTree.init( ica, rsvc );
}
catch (TemplateInitException pex)
{
Info info = new Info( templateName, node.getLine(), node.getColumn() );
throw new ParseErrorException( pex.getMessage(), info );
}
try
{
preRender(ica);
/*
* now render, and let any exceptions fly
*/
nodeTree.render( ica, writer );
}
catch (StopCommand stop)
{
if (!stop.isFor(this))
{