001    package railo.transformer.cfml;
002    
003    import railo.runtime.exp.TemplateException;
004    import railo.transformer.bytecode.expression.Expression;
005    import railo.transformer.cfml.evaluator.EvaluatorPool;
006    import railo.transformer.library.function.FunctionLib;
007    import railo.transformer.util.CFMLString;
008    
009    /**
010     * Innerhalb einer TLD (Tag Library Descriptor) kann eine Klasse angemeldet werden, 
011     * welche das Interface ExprTransfomer implementiert, 
012     * um Ausdr�cke die innerhalb von Attributen und dem Body von Tags vorkommen zu transformieren. 
013     * Die Idee dieses Interface ist es die M�glichkeit zu bieten, 
014     * weitere ExprTransfomer zu erstellen zu k�nnen, 
015     * um f�r verschiedene TLD, verschiedene Ausdrucksarten zu bieten. 
016     *
017     */
018    public interface ExprTransformer {
019    
020            /**
021            * Wird aufgerufen um aus dem �bergebenen CFMLString einen Ausdruck auszulesen 
022             * und diesen in ein CFXD Element zu �bersetzten.
023             * <br>
024             * Beispiel eines �bergebenen String:<br>
025             * "session.firstName" oder "trim(left('test'&var1,3))"
026             * 
027             * @param fld Array von Function Libraries, 
028             * Mithilfe dieser Function Libraries kann der Transfomer buil-in Funktionen innerhalb des CFML Codes erkennen 
029             * und validieren.
030             * @param doc XML Document des aktuellen zu erstellenden CFXD
031             * @param cfml Text der transfomiert werden soll.
032             * @return Element CFXD Element
033             * @throws railo.runtime.exp.TemplateException 
034             * @throws TemplateException
035             */
036            public Expression transform(EvaluatorPool ep,FunctionLib[] fld,CFMLString cfml) throws TemplateException;
037            
038            /**
039            * Wird aufgerufen um aus dem �bergebenen CFMLString einen Ausdruck auszulesen 
040             * und diesen in ein CFXD Element zu �bersetzten. Es wird aber davon ausgegangen das es sich um einen String handelt.
041             * <br>
042             * Beispiel eines �bergebenen String:<br>
043             * "session.firstName" oder "trim(left('test'&var1,3))"
044             * 
045             * @param fld Array von Function Libraries, 
046             * Mithilfe dieser Function Libraries kann der Transfomer buil-in Funktionen innerhalb des CFML Codes erkennen 
047             * und validieren.
048             * @param doc XML Document des aktuellen zu erstellenden CFXD
049             * @param cfml Text der transfomiert werden soll.
050             * @return Element CFXD Element
051             * @throws TemplateException
052             */
053            public Expression transformAsString(EvaluatorPool ep,FunctionLib[] fld,CFMLString cfml, boolean allowLowerThan) throws TemplateException;
054    }