use of lucee.runtime.exp.TemplateException in project Lucee by lucee.
the class CFMLCompilerImpl method _compile.
/*private byte[] _compiless(ConfigImpl config,PageSource ps,SourceCode sc,String className, TagLib[] tld, FunctionLib[] fld,
Resource classRootDir,TransfomerSettings settings) throws TemplateException {
Factory factory = BytecodeFactory.getInstance(config);
Page page=null;
TagLib[][] _tlibs=new TagLib[][]{null,new TagLib[0]};
_tlibs[CFMLTransformer.TAG_LIB_GLOBAL]=tld;
// reset page tlds
if(_tlibs[CFMLTransformer.TAG_LIB_PAGE].length>0) {
_tlibs[CFMLTransformer.TAG_LIB_PAGE]=new TagLib[0];
}
CFMLScriptTransformer scriptTransformer = new CFMLScriptTransformer();
scriptTransformer.transform(
BytecodeFactory.getInstance(config)
, page
, new EvaluatorPool()
, _tlibs, fld
, null
, config.getCoreTagLib(ps.getDialect()).getScriptTags()
, sc
, settings);
//CFMLExprTransformer extr=new CFMLExprTransformer();
//extr.transform(factory, page, ep, tld, fld, scriptTags, cfml, settings)
return null;
}*/
private Result _compile(ConfigImpl config, PageSource ps, SourceCode sc, String className, TagLib[] tld, FunctionLib[] fld, Resource classRootDir, boolean returnValue, boolean ignoreScopes) throws TemplateException, IOException {
if (className == null)
className = ps.getClassName();
Result result = null;
// byte[] barr = null;
Page page = null;
Factory factory = BytecodeFactory.getInstance(config);
try {
page = sc == null ? cfmlTransformer.transform(factory, config, ps, tld, fld, returnValue, ignoreScopes) : cfmlTransformer.transform(factory, config, sc, tld, fld, System.currentTimeMillis(), sc.getDialect() == CFMLEngine.DIALECT_CFML && config.getDotNotationUpperCase(), returnValue, ignoreScopes);
page.setSplitIfNecessary(false);
try {
result = new Result(page, page.execute(className));
} catch (RuntimeException re) {
String msg = StringUtil.emptyIfNull(re.getMessage());
if (StringUtil.indexOfIgnoreCase(msg, "Method code too large!") != -1) {
page = sc == null ? cfmlTransformer.transform(factory, config, ps, tld, fld, returnValue, ignoreScopes) : cfmlTransformer.transform(factory, config, sc, tld, fld, System.currentTimeMillis(), sc.getDialect() == CFMLEngine.DIALECT_CFML && config.getDotNotationUpperCase(), returnValue, ignoreScopes);
page.setSplitIfNecessary(true);
result = new Result(page, page.execute(className));
} else
throw re;
} catch (ClassFormatError cfe) {
String msg = StringUtil.emptyIfNull(cfe.getMessage());
if (StringUtil.indexOfIgnoreCase(msg, "Invalid method Code length") != -1) {
page = ps != null ? cfmlTransformer.transform(factory, config, ps, tld, fld, returnValue, ignoreScopes) : cfmlTransformer.transform(factory, config, sc, tld, fld, System.currentTimeMillis(), sc.getDialect() == CFMLEngine.DIALECT_CFML && config.getDotNotationUpperCase(), returnValue, ignoreScopes);
page.setSplitIfNecessary(true);
result = new Result(page, page.execute(className));
} else
throw cfe;
}
// store
if (classRootDir != null) {
Resource classFile = classRootDir.getRealResource(page.getClassName() + ".class");
Resource classFileDirectory = classFile.getParentResource();
if (!classFileDirectory.exists())
classFileDirectory.mkdirs();
IOUtil.copy(new ByteArrayInputStream(result.barr), classFile, true);
}
return result;
} catch (AlreadyClassException ace) {
byte[] bytes = ace.getEncrypted() ? readEncrypted(ace) : readPlain(ace);
result = new Result(null, bytes);
String displayPath = ps != null ? "[" + ps.getDisplayPath() + "] " : "";
String srcName = ASMUtil.getClassName(result.barr);
int dialect = sc == null ? ps.getDialect() : sc.getDialect();
// source is cfm and target cfc
if (dialect == CFMLEngine.DIALECT_CFML && endsWith(srcName, Constants.getCFMLTemplateExtensions(), dialect) && className.endsWith("_" + Constants.getCFMLComponentExtension() + (dialect == CFMLEngine.DIALECT_CFML ? Constants.CFML_CLASS_SUFFIX : Constants.LUCEE_CLASS_SUFFIX))) {
throw new TemplateException("source file " + displayPath + "contains the bytecode for a regular cfm template not for a component");
}
// source is cfc and target cfm
if (dialect == CFMLEngine.DIALECT_CFML && srcName.endsWith("_" + Constants.getCFMLComponentExtension() + (dialect == CFMLEngine.DIALECT_CFML ? Constants.CFML_CLASS_SUFFIX : Constants.LUCEE_CLASS_SUFFIX)) && endsWith(className, Constants.getCFMLTemplateExtensions(), dialect))
throw new TemplateException("source file " + displayPath + "contains a component not a regular cfm template");
// rename class name when needed
if (!srcName.equals(className))
result = new Result(result.page, ClassRenamer.rename(result.barr, className));
// store
if (classRootDir != null) {
Resource classFile = classRootDir.getRealResource(className + ".class");
Resource classFileDirectory = classFile.getParentResource();
if (!classFileDirectory.exists())
classFileDirectory.mkdirs();
result = new Result(result.page, Page.setSourceLastModified(result.barr, ps != null ? ps.getPhyscalFile().lastModified() : System.currentTimeMillis()));
IOUtil.copy(new ByteArrayInputStream(result.barr), classFile, true);
}
return result;
} catch (TransformerException bce) {
Position pos = bce.getPosition();
int line = pos == null ? -1 : pos.line;
int col = pos == null ? -1 : pos.column;
if (ps != null)
bce.addContext(ps, line, col, null);
throw bce;
}
}
use of lucee.runtime.exp.TemplateException in project Lucee by lucee.
the class CFMLTransformer method literal.
/**
* Liest Literale Zeichenketten ein die sich innerhalb und auserhalb von tgas befinden,
* beim Einlesen wird unterschieden ob Expression geparsst werden muessen oder nicht,
* dies ist abhaengig, von der Definition des Tag in dem man sich allenfalls befindet, innerhalb der TLD.
* @param parent uebergeordnetes Element.
* @param parseExpression Definiert on Expressions geparset werden sollen oder nicht.
* @param transformer Expression Transfomer zum uebersetzen der Expressions innerhalb des Literals.
* @throws TemplateException
*
* <br />
* EBNF:<br />
* <code>("<" | {?-"#"-"<"} "<" | {"#" expression "#"} "<" ) | ({?-"<"} "<")
* (* Welcher Teil der "oder" Bedingung ausgefuehrt wird, ist abhaengig ob die Tag-Lib vorgibt,
* dass Expression geparst werden sollen oder nicht. *)</code>
*/
private void literal(TagData data, Body parent, boolean parseExpression, ExprTransformer transformer) throws TemplateException {
// with expression
if (parseExpression) {
if (data.srcCode.isAfterLast())
return;
// data.cfml.getCurrent()
StringBuffer text = new StringBuffer();
int count = 0;
while (data.srcCode.isValidIndex()) {
count++;
// #
if (data.srcCode.isCurrent('#')) {
data.srcCode.next();
if (data.srcCode.isCurrent('#')) {
text.append('#');
} else {
if (text.length() > 0) {
Position end = data.srcCode.getPosition();
Position start = data.srcCode.getPosition(end.pos - text.length());
parent.addPrintOut(data.factory, text.toString(), start, end);
start = end;
text = new StringBuffer();
}
Position end = data.srcCode.getPosition();
Position start = data.srcCode.getPosition(end.pos - text.length());
PrintOut po;
parent.addStatement(po = new PrintOut(transformer.transform(data.factory, data.root, data.ep, data.tlibs, data.flibs, data.scriptTags, data.srcCode, data.settings), start, end));
po.setEnd(data.srcCode.getPosition());
if (!data.srcCode.isCurrent('#'))
throw new TemplateException(data.srcCode, "missing terminating [#] for expression");
}
} else if (data.srcCode.isCurrent('<') && count > 1) {
break;
} else
text.append(data.srcCode.getCurrent());
data.srcCode.next();
}
if (text.length() > 0) {
Position end = data.srcCode.getPosition();
Position start = data.srcCode.getPosition(end.pos - text.length());
parent.addPrintOut(data.factory, text.toString(), start, end);
}
} else // no expression
{
int start = data.srcCode.getPos();
data.srcCode.next();
int end = data.srcCode.indexOfNext('<');
String text;
if (end == -1) {
text = data.srcCode.substring(start);
data.srcCode.setPos(data.srcCode.length());
} else {
text = data.srcCode.substring(start, end - start);
data.srcCode.setPos(end);
}
Position e = data.srcCode.getPosition();
Position s = data.srcCode.getPosition(start);
parent.addPrintOut(data.factory, text, s, e);
}
}
use of lucee.runtime.exp.TemplateException in project Lucee by lucee.
the class CFMLTransformer method transform.
/**
* Startmethode zum transfomieren einer CFML Datei.
* <br />
* EBNF:<br />
* <code>{body}</code>
* @param config
* @param ps CFML File
* @param tlibs Tag Library Deskriptoren, nach denen innerhalb der CFML Datei geprueft werden soll.
* @param flibs Function Library Deskriptoren, nach denen innerhalb der Expressions der CFML Datei geprueft werden soll.
* @param returnValue if true the method returns the value of the last expression executed inside when you call the method "call"
* @return uebersetztes CFXD Dokument Element.
* @throws TemplateException
* @throws IOException
*/
public Page transform(Factory factory, ConfigImpl config, PageSource ps, TagLib[] tlibs, FunctionLib[] flibs, boolean returnValue, boolean ignoreScopes) throws TemplateException, IOException {
Page p;
SourceCode sc;
boolean writeLog = config.getExecutionLogEnabled();
Charset charset = config.getTemplateCharset();
boolean dotUpper = ps.getDialect() == CFMLEngine.DIALECT_CFML && ((MappingImpl) ps.getMapping()).getDotNotationUpperCase();
// parse regular
while (true) {
try {
sc = new PageSourceCode(ps, charset, writeLog);
p = transform(factory, config, sc, tlibs, flibs, ps.getResource().lastModified(), dotUpper, returnValue, ignoreScopes);
break;
} catch (ProcessingDirectiveException pde) {
if (pde.getWriteLog() != null)
writeLog = pde.getWriteLog().booleanValue();
if (pde.getDotNotationUpperCase() != null)
dotUpper = pde.getDotNotationUpperCase().booleanValue();
if (!StringUtil.isEmpty(pde.getCharset()))
charset = pde.getCharset();
}
}
// could it be a component?
boolean isCFML = ps.getDialect() == CFMLEngine.DIALECT_CFML;
boolean isCFMLCompExt = isCFML && Constants.isCFMLComponentExtension(ResourceUtil.getExtension(ps.getResource(), ""));
boolean possibleUndetectedComponent = false;
// we don't have a component or interface
if (p.isPage()) {
if (isCFML)
possibleUndetectedComponent = isCFMLCompExt;
else if (Constants.isLuceeComponentExtension(ResourceUtil.getExtension(ps.getResource(), ""))) {
Expression expr;
Statement stat;
PrintOut po;
LitString ls;
List<Statement> statements = p.getStatements();
// check the root statements for component
Iterator<Statement> it = statements.iterator();
String str;
while (it.hasNext()) {
stat = it.next();
if (stat instanceof PrintOut && (expr = ((PrintOut) stat).getExpr()) instanceof LitString) {
ls = (LitString) expr;
str = ls.getString();
if (str.indexOf(Constants.LUCEE_COMPONENT_TAG_NAME) != -1 || str.indexOf(Constants.LUCEE_INTERFACE_TAG_NAME) != -1 || // cfml name is supported as alias
str.indexOf(Constants.CFML_COMPONENT_TAG_NAME) != -1) {
possibleUndetectedComponent = true;
break;
}
}
}
}
}
/*if(p.isPage() && (isCFML?
Constants.isCFMLComponentExtension(ResourceUtil.getExtension(ps.getResource(),"")):
Constants.isLuceeComponentExtension(ResourceUtil.getExtension(ps.getResource(),""))) &&
isPossibleRawScript(sc,config.getIdentification())){*/
if (possibleUndetectedComponent) {
Page _p;
TagLibTag scriptTag = CFMLTransformer.getTLT(sc, isCFML ? Constants.CFML_SCRIPT_TAG_NAME : Constants.LUCEE_SCRIPT_TAG_NAME, config.getIdentification());
sc.setPos(0);
SourceCode original = sc;
// try inside a cfscript
String text = "<" + scriptTag.getFullName() + ">" + original.getText() + "\n</" + scriptTag.getFullName() + ">";
sc = new PageSourceCode(ps, text, charset, writeLog);
try {
while (true) {
if (sc == null) {
sc = new PageSourceCode(ps, charset, writeLog);
text = "<" + scriptTag.getFullName() + ">" + sc.getText() + "\n</" + scriptTag.getFullName() + ">";
sc = new PageSourceCode(ps, text, charset, writeLog);
}
try {
_p = transform(factory, config, sc, tlibs, flibs, ps.getResource().lastModified(), dotUpper, returnValue, ignoreScopes);
break;
} catch (ProcessingDirectiveException pde) {
if (pde.getWriteLog() != null)
writeLog = pde.getWriteLog().booleanValue();
if (pde.getDotNotationUpperCase() != null)
dotUpper = pde.getDotNotationUpperCase().booleanValue();
if (!StringUtil.isEmpty(pde.getCharset()))
charset = pde.getCharset();
sc = null;
}
}
} catch (ComponentTemplateException e) {
throw e.getTemplateException();
}
// we only use that result if it is a component now
if (_p != null && !_p.isPage())
return _p;
}
if (isCFMLCompExt && !p.isComponent() && !p.isInterface()) {
String msg = "template [" + ps.getDisplayPath() + "] must contain a component or an interface.";
if (sc != null)
throw new TemplateException(sc, msg);
throw new TemplateException(msg);
}
return p;
}
use of lucee.runtime.exp.TemplateException in project Lucee by lucee.
the class CFMLTransformer method executeEvaluator.
private boolean executeEvaluator(TagData data, TagLibTag tagLibTag, Tag tag) throws TemplateException {
if (tagLibTag.hasTTE()) {
try {
TagLib lib = tagLibTag.getEvaluator().execute(data.config, tag, tagLibTag, data.flibs, data);
if (lib != null) {
// set
for (int i = 0; i < data.tlibs[TAG_LIB_PAGE].length; i++) {
if (data.tlibs[TAG_LIB_PAGE][i].getNameSpaceAndSeparator().equalsIgnoreCase(lib.getNameSpaceAndSeparator())) {
boolean extIsCustom = data.tlibs[TAG_LIB_PAGE][i] instanceof CustomTagLib;
boolean newIsCustom = lib instanceof CustomTagLib;
// TagLib + CustomTagLib (visa/versa)
if (extIsCustom) {
((CustomTagLib) data.tlibs[TAG_LIB_PAGE][i]).append(lib);
return true;
} else if (newIsCustom) {
((CustomTagLib) lib).append(data.tlibs[TAG_LIB_PAGE][i]);
data.tlibs[TAG_LIB_PAGE][i] = lib;
return true;
}
}
}
// TODO make sure longer namespace ar checked firts to support subsets, same for core libs
// insert
TagLib[] newTlibs = new TagLib[data.tlibs[TAG_LIB_PAGE].length + 1];
for (int i = 0; i < data.tlibs[TAG_LIB_PAGE].length; i++) {
newTlibs[i] = data.tlibs[TAG_LIB_PAGE][i];
}
newTlibs[data.tlibs[TAG_LIB_PAGE].length] = lib;
data.tlibs[TAG_LIB_PAGE] = newTlibs;
}
} catch (EvaluatorException e) {
throw new TemplateException(data.srcCode, e);
}
}
return true;
}
use of lucee.runtime.exp.TemplateException in project Lucee by lucee.
the class CFMLTransformer method tag.
/**
* Liest einen Tag ein, prueft hierbei ob das Tag innerhalb einer der geladenen Tag-Lib existiert,
* ansonsten wird ein Tag einfach als literal-string aufgenommen.
* <br />
* EBNF:<br />
* <code>name-space identifier spaces attributes ("/>" | ">" [body "</" identifier spaces ">"]);(* Ob dem Tag ein Body und ein End-Tag folgt ist abhaengig von Definition des body-content in Tag-Lib, gleices gilt fuer appendix *)</code>
* @param parent uebergeornetes Tag
* @param parseExpression sollen Expresson innerhalb des Body geparste werden oder nicht.
* @return Gibt zurueck ob es sich um ein Tag as einer Tag-Lib handelte oder nicht.
* @throws TemplateException
*/
private boolean tag(TagData data, Body parent, boolean parseExpression) throws TemplateException {
// lucee.print.ln("--->"+data.cfml.getCurrent());
boolean hasBody = false;
Position line = data.srcCode.getPosition();
// int column=data.cfml.getColumn();
int start = data.srcCode.getPos();
data.srcCode.next();
// read in namespace of tag
TagLib tagLib = nameSpace(data);
// return if no matching tag lib
if (tagLib == null) {
data.srcCode.previous();
return false;
}
// Get matching tag from tag lib
String strNameNormal = identifier(data.srcCode, false, true);
if (strNameNormal == null) {
data.srcCode.setPos((data.srcCode.getPos() - tagLib.getNameSpaceAndSeparator().length()) - 1);
return false;
}
String strName = strNameNormal.toLowerCase();
String appendix = null;
TagLibTag tagLibTag = tagLib.getTag(strName);
// get taglib
if (tagLibTag == null) {
tagLibTag = tagLib.getAppendixTag(strName);
if (tagLibTag == null) {
if (tagLib.getIgnoreUnknowTags()) {
data.srcCode.setPos(start);
return false;
}
throw new TemplateException(data.srcCode, "undefined tag [" + tagLib.getNameSpaceAndSeparator() + strName + "]");
}
appendix = StringUtil.removeStartingIgnoreCase(strNameNormal, tagLibTag.getName());
}
// CFXD Element
Tag tag;
try {
tag = tagLibTag.getTag(data.factory, line, data.srcCode.getPosition());
} catch (Exception e) {
throw new TemplateException(data.srcCode, e);
}
parent.addStatement(tag);
// get tag from tag library
if (appendix != null) {
tag.setAppendix(appendix);
tag.setFullname(tagLibTag.getFullName().concat(appendix));
} else {
tag.setFullname(tagLibTag.getFullName());
}
// if(tag.getFullname().equalsIgnoreCase("cfcomponent"))data.page.setIsComponent(true); // MUST to hardcoded, to better
// else if(tag.getFullname().equalsIgnoreCase("cfinterface"))data.page.setIsInterface(true); // MUST to hardcoded, to better
tag.setTagLibTag(tagLibTag);
comment(data.srcCode, true);
// Tag Translator Evaluator
if (tagLibTag.hasTTE()) {
data.ep.add(tagLibTag, tag, data.flibs, data.srcCode);
}
// get Attributes
attributes(data, tagLibTag, tag);
if (tagLibTag.hasAttributeEvaluator()) {
try {
tagLibTag = tagLibTag.getAttributeEvaluator().evaluate(tagLibTag, tag);
} catch (AttributeEvaluatorException e) {
throw new TemplateException(data.srcCode, e);
}
}
// TODO muss erlaubt sein
if (data.srcCode.forwardIfCurrent('>')) {
hasBody = tagLibTag.getHasBody();
} else if (data.srcCode.forwardIfCurrent('/', '>')) {
if (tagLibTag.getHasBody())
tag.setBody(new BodyBase(data.factory));
} else {
throw createTemplateException(data.srcCode, "tag [" + tagLibTag.getFullName() + "] is not closed", tagLibTag);
}
// Body
if (hasBody) {
// get Body
if (tagLibTag.isTagDependent()) {
// get TagDependentBodyTransformer
TagDependentBodyTransformer tdbt = null;
try {
tdbt = tagLibTag.getBodyTransformer();
} catch (TagLibException e) {
throw new TemplateException(data.srcCode, e);
}
if (tdbt == null)
throw createTemplateException(data.srcCode, "Tag dependent body Transformer is invalid for Tag [" + tagLibTag.getFullName() + "]", tagLibTag);
tag.setBody(tdbt.transform(data.factory, data.root, data.ep, data.tlibs, data.flibs, tagLibTag.getFullName(), data.scriptTags, data.srcCode, data.settings));
// get TagLib of end Tag
if (!data.srcCode.forwardIfCurrent("</")) {
// MUST this is a patch, do a more proper implementation
TemplateException te = new TemplateException(data.srcCode, "invalid construct");
if (tdbt instanceof CFMLScriptTransformer && ASMUtil.containsComponent(tag.getBody())) {
throw new CFMLScriptTransformer.ComponentTemplateException(te);
}
throw te;
}
TagLib tagLibEnd = nameSpace(data);
// same NameSpace
if (!(tagLibEnd != null && tagLibEnd.getNameSpaceAndSeparator().equals(tagLib.getNameSpaceAndSeparator())))
throw new TemplateException(data.srcCode, "invalid construct");
// get end Tag
String strNameEnd = identifier(data.srcCode, true, true).toLowerCase();
// not the same name Tag
if (!strName.equals(strNameEnd)) {
data.srcCode.setPos(start);
throw new TemplateException(data.srcCode, "Start and End Tag has not the same Name [" + tagLib.getNameSpaceAndSeparator() + strName + "-" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "]");
}
data.srcCode.removeSpace();
if (!data.srcCode.forwardIfCurrent('>'))
throw new TemplateException(data.srcCode, "End Tag [" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "] not closed");
} else {
// get body of Tag
BodyBase body = new BodyBase(data.factory);
body.setParent(tag);
// parseExpression=(tagLibTag.getParseBody())?true:parseExpression;
if (tagLibTag.getParseBody())
parseExpression = true;
while (true) {
// Load Expession Transformer from TagLib
ExprTransformer transfomer = null;
if (parseExpression) {
try {
transfomer = tagLibTag.getTagLib().getExprTransfomer();
} catch (TagLibException e) {
throw new TemplateException(data.srcCode, e);
}
}
// call body
body(data, body, parseExpression, transfomer);
// no End Tag
if (data.srcCode.isAfterLast()) {
if (tagLibTag.isBodyReq()) {
data.srcCode.setPos(start);
throw createTemplateException(data.srcCode, "No matching end tag found for tag [" + tagLibTag.getFullName() + "]", tagLibTag);
}
body.moveStatmentsTo(parent);
return executeEvaluator(data, tagLibTag, tag);
}
// Invalid Construct
int posBeforeEndTag = data.srcCode.getPos();
if (!data.srcCode.forwardIfCurrent('<', '/'))
throw createTemplateException(data.srcCode, "Missing end tag for [" + tagLibTag.getFullName() + "]", tagLibTag);
// get TagLib of end Tag
int _start = data.srcCode.getPos();
TagLib tagLibEnd = nameSpace(data);
// same NameSpace
if (tagLibEnd != null) {
String strNameEnd = "";
// lucee.print.ln(data.cfml.getLine()+" - "+data.cfml.getColumn()+" - "+tagLibEnd.getNameSpaceAndSeperator()+".equals("+tagLib.getNameSpaceAndSeperator()+")");
if (tagLibEnd.getNameSpaceAndSeparator().equals(tagLib.getNameSpaceAndSeparator())) {
// get end Tag
strNameEnd = identifier(data.srcCode, true, true).toLowerCase();
// not the same name Tag
// new part
data.srcCode.removeSpace();
if (strName.equals(strNameEnd)) {
if (!data.srcCode.forwardIfCurrent('>'))
throw new TemplateException(data.srcCode, "End Tag [" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "] not closed");
break;
}
}
// new part
if (tagLibTag.isBodyReq()) {
TagLibTag endTag = tagLibEnd.getTag(strNameEnd);
if (endTag != null && !endTag.getHasBody())
throw new TemplateException(data.srcCode, "End Tag [" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "] is not allowed, for this tag only a Start Tag is allowed");
data.srcCode.setPos(start);
if (tagLibEnd.getIgnoreUnknowTags() && (tagLibEnd.getTag(strNameEnd)) == null) {
data.srcCode.setPos(_start);
} else
throw new TemplateException(data.srcCode, "Start and End Tag has not the same Name [" + tagLib.getNameSpaceAndSeparator() + strName + "-" + tagLibEnd.getNameSpaceAndSeparator() + strNameEnd + "]");
} else {
body.moveStatmentsTo(parent);
data.srcCode.setPos(posBeforeEndTag);
return executeEvaluator(data, tagLibTag, tag);
}
// / new part
}
body.addPrintOut(data.factory, "</", null, null);
}
tag.setBody(body);
}
}
if (tag instanceof StatementBase)
((StatementBase) tag).setEnd(data.srcCode.getPosition());
return executeEvaluator(data, tagLibTag, tag);
}
Aggregations