1 package net.sourceforge.jenesis4java; 2 3 /* 4 * #%L 5 * Jenesis 4 Java Code Generator 6 * %% 7 * Copyright (C) 2000 - 2015 jenesis4java 8 * %% 9 * This program is free software: you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as 11 * published by the Free Software Foundation, either version 3 of the 12 * License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Lesser Public License for more details. 18 * 19 * You should have received a copy of the GNU General Lesser Public 20 * License along with this program. If not, see 21 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 22 * #L% 23 */ 24 25 import java.util.List; 26 27 /** 28 * Copyright (C) 2008, 2010 Richard van Nieuwenhoven - ritchie [at] gmx [dot] at 29 * Copyright (C) 2000, 2001 Paul Cody Johnston - pcj@inxar.org <br> 30 * This file is part of Jenesis4java. Jenesis4java is free software: you can 31 * redistribute it and/or modify it under the terms of the GNU Lesser General 32 * Public License as published by the Free Software Foundation, either version 3 33 * of the License, or (at your option) any later version.<br> 34 * Jenesis4java is distributed in the hope that it will be useful, but WITHOUT 35 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 36 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 37 * details.<br> 38 * You should have received a copy of the GNU Lesser General Public License 39 * along with Jenesis4java. If not, see <http://www.gnu.org/licenses/>. 40 */ 41 /** 42 * The {@code CodeWriter} is the object to which code is rendered. All methods 43 * that add content to the {@code CodeWriter} should return the same object 44 * passed to them though the {@code toCode()} method. This supports a coding 45 * style analogous to the {@code StringBuffer} class. 46 */ 47 public interface CodeWriter { 48 49 /** 50 * Decrements the tab and makes sure, a new line is started. 51 */ 52 CodeWriter dedentLine(); 53 54 /** 55 * Returns the current number of characters in the current line. It does not 56 * take the indent into account. Therefore, only the write methods and the 57 * space method increment the column counter. 58 */ 59 int getColumnNumber(); 60 61 /** 62 * gets the context compilation unit. 63 */ 64 CompilationUnit getCompilationUnit(); 65 66 /** 67 * Returns the current number of indentation levels. 68 */ 69 int getIndentNumber(); 70 71 /** 72 * Returns the number of lines of the current document. 73 */ 74 int getLineNumber(); 75 76 /** 77 * Increments the tab and ensures that current line is empty. 78 */ 79 CodeWriter indentLine(); 80 81 /** 82 * Returns true if no characters have been written since the last call of 83 * newLine(). 84 */ 85 boolean isLineNew(); 86 87 /** 88 * Starts a new line, if characters are present on the current line. 89 */ 90 CodeWriter ensureNewLine(); 91 92 /** 93 * Adds a the newLine string according to 94 * {@code System.getProperty("line.separator")} and the line is padded with 95 * the n tab characters where n is the number returned by 96 * {@code getIndentNumber()}. 97 */ 98 CodeWriter newLine(); 99 100 /** 101 * This method allows those codeable objects to inject a comment without 102 * interrupting the line-by-line code itself. For example, if an expression 103 * wants to express a comment, it cannot do it until the end of the line. 104 * Before the newline is called, all comments given to the code writer will 105 * be written. 106 */ 107 CodeWriter queue(Comment comment); 108 109 /** 110 * Resets the tab counter to zero and calls the newLine() method. 111 */ 112 CodeWriter resetLine(); 113 114 /** 115 * sets the context compilation unit. 116 */ 117 void setCompilationUnit(CompilationUnit mCompilationUnit); 118 119 /** 120 * Writes a single space. 121 */ 122 CodeWriter space(); 123 124 /** 125 * Writes a boolean. 126 */ 127 CodeWriter write(boolean b); 128 129 /** 130 * Writes a single character. 131 */ 132 CodeWriter write(char c); 133 134 /** 135 * Writes an array of characters. 136 */ 137 CodeWriter write(char[] chars); 138 139 /** 140 * Writes an array of characters starting at the offset with total length 141 * len. 142 */ 143 CodeWriter write(char[] chars, int off, int len); 144 145 /** 146 * Instead of calling the {@code Object.toString()} method, the 147 * {@code Object.toCode(CodeWriter)} method is invoked with {@code this} as 148 * the argument. 149 */ 150 CodeWriter write(Codeable codeable); 151 152 /** 153 * Iterates the array and sends each element to {@code write(Codeable)} . 154 */ 155 CodeWriter write(Codeable[] codeables); 156 157 /** 158 * Writes a double. 159 */ 160 CodeWriter write(double d); 161 162 /** 163 * Writes a float. 164 */ 165 CodeWriter write(float f); 166 167 /** 168 * Writes an integer. 169 */ 170 CodeWriter write(int i); 171 172 /** 173 * Iterates the array and sends each element to {@code write(Codeable)} . 174 */ 175 CodeWriter write(List<? extends Codeable> codeables); 176 177 /** 178 * Writes an object. 179 */ 180 CodeWriter write(Object o); 181 182 /** 183 * Writes a string. 184 */ 185 CodeWriter write(String s); 186 187 }