001    package railo.transformer.cfml.expression;
002    
003    import railo.runtime.exp.TemplateException;
004    import railo.transformer.bytecode.Page;
005    import railo.transformer.bytecode.expression.Expression;
006    import railo.transformer.cfml.ExprTransformer;
007    import railo.transformer.cfml.TransfomerSettings;
008    import railo.transformer.cfml.evaluator.EvaluatorPool;
009    import railo.transformer.cfml.script.AbstrCFMLScriptTransformer;
010    import railo.transformer.library.function.FunctionLib;
011    import railo.transformer.library.tag.TagLibTag;
012    import railo.transformer.util.CFMLString;
013    
014    public class CFMLExprTransformer extends AbstrCFMLScriptTransformer implements ExprTransformer {
015    
016            /**
017             * @see railo.transformer.data.cfml.ExprTransformer#transformAsString(railo.transformer.library.function.FunctionLib[], org.w3c.dom.Document, railo.transformer.util.CFMLString)
018             */
019            public Expression transformAsString(Page page,EvaluatorPool ep,FunctionLib[] fld,TagLibTag[] scriptTags, CFMLString cfml, TransfomerSettings settings, boolean allowLowerThan) throws TemplateException {
020                    return transformAsString(init(page,ep,fld,scriptTags, cfml,settings,allowLowerThan),new String[]{" ", ">", "/>"});
021            }
022            
023            
024            /**
025             * Wird aufgerufen um aus dem bergebenen CFMLString einen Ausdruck auszulesen 
026             * und diesen in ein CFXD Element zu bersetzten.
027             * <br />
028             * Beispiel eines bergebenen String:<br />
029             * <code>session.firstName</code> oder <code>trim(left('test'&var1,3))</code>
030             * <br />
031             * EBNF:<br />
032             * <code>spaces impOp;</code>
033             * 
034             * @param fld Array von Function Libraries, 
035             * Mithilfe dieser Function Libraries kann der Transfomer buil-in Funktionen innerhalb des CFML Codes erkennen 
036             * und validieren.
037             * @param doc XML Document des aktuellen zu erstellenden CFXD
038             * @param cfml Text der transfomiert werden soll.
039             * @return Element CFXD Element
040             * @throws TemplateException
041             */
042            public Expression transform(Page page,EvaluatorPool ep,FunctionLib[] fld,TagLibTag[] scriptTags, CFMLString cfml, TransfomerSettings settings) throws TemplateException {
043                    Data data = init(page,ep,fld,scriptTags, cfml,settings,false);
044                    comments(data);
045                    return assignOp(data);
046            }
047            
048    }