1 /* 2 * This file is part of Pease Plate Template Engine. 3 * 4 * Pease Plate Template Engine is free software: you can redistribute 5 * it and/or modify it under the terms of the GNU Lesser General 6 * Public License as published by the Free Software Foundation, 7 * either version 3 of the License, or any later version. 8 * 9 * Pease Plate Template Engine is distributed in the hope that it 10 * will be useful, but WITHOUT ANY WARRANTY; without even the implied 11 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 * See the GNU Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with Pease Plate Template Engine. If not, see 16 * <http://www.gnu.org/licenses/>. 17 * 18 * Copyright (c) 2008 Manfred HANTSCHEL 19 */ 20 package org.peaseplate.lang; 21 22 import org.peaseplate.TemplateEngine; 23 import org.peaseplate.TemplateException; 24 import org.peaseplate.chunk.Chunk; 25 import org.peaseplate.internal.designator.ContentDesignator; 26 import org.peaseplate.internal.model.CompileContext; 27 import org.peaseplate.internal.parser.Token; 28 29 /** 30 * A designator knows how to compile a code fragment enclosed by 31 * the "${" and "}". It has a keyword which identifies this designator. 32 * 33 * Default designators are (among others): "print", "if", "while", "end", "import", "include",... 34 * 35 * @author Manfred HANTSCHEL 36 */ 37 public interface Designator { 38 39 /** 40 * Returns the keyword of the designator. The keyword 41 * must be unique within the {@link TemplateEngine}. 42 * The following characters are allowed: any letter, 43 * any digit, '.', '_', '-' and '/'. 44 * 45 * @return the keyword of the designator, not null 46 */ 47 public String getKeyword(); 48 49 /** 50 * If this method returns true it indicates that the code fragment 51 * does not contain code and does not need to get compiled 52 * (e.g. ${end}, ${else}, ${break},...). 53 * 54 * @return true if empty, false otherwise 55 */ 56 public boolean isEmpty(); 57 58 /** 59 * Returns true if the chunk generated by the designator is visible, 60 * false otherwise. If the chunk can generate visible output, 61 * this method returns true. 62 * 63 * A content chunk with only white spaces in it, is by definition 64 * not visible. This method cannot compute this, since is does not get 65 * the source. Handle {@link ContentDesignator} separately. 66 * 67 * @return true if visible, false otherwise 68 */ 69 public boolean isVisible(); 70 71 public boolean isBlockHead(); 72 73 public boolean isBlockTail(); 74 75 public boolean isExpandableBlock(); 76 77 public boolean isBlockExpansion(); 78 79 public Chunk compile(TemplateEngine engine, CompileContext context, Token token) throws TemplateException; 80 81 }