1 /*
  2  * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.  Oracle designates this
  8  * particular file as subject to the "Classpath" exception as provided
  9  * by Oracle in the LICENSE file that accompanied this code.
 10  *
 11  * This code is distributed in the hope that it will be useful, but WITHOUT
 12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 14  * version 2 for more details (a copy is included in the LICENSE file that
 15  * accompanied this code).
 16  *
 17  * You should have received a copy of the GNU General Public License version
 18  * 2 along with this work; if not, write to the Free Software Foundation,
 19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 20  *
 21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 22  * or visit www.oracle.com if you need additional information or have any
 23  * questions.
 24  */
 25 
 26 package jdk.code.tools.renderer;
 27 
 28 /**
 29  * Created by gfrost
 30  */
 31 public class CommonRenderer<T extends CommonRenderer<T>> extends TextRenderer<T> {
 32 
 33     public CommonRenderer() {
 34     }
 35 
 36     public CommonRenderer(TextRenderer<?> renderer) {
 37         super(renderer);
 38     }
 39 
 40     public T semicolon() {
 41         return op(";");
 42     }
 43 
 44     public T comma() {
 45         return op(",");
 46     }
 47 
 48     public T commaSeparatedList() {
 49         return startList();
 50     }
 51 
 52     public T commaSeparator() {
 53         if (!first()) {
 54             comma().space();
 55         }
 56         return self();
 57     }
 58 
 59     public T commaSpaceSeparatedList() {
 60         return startList();
 61     }
 62 
 63     public T commaSpaceSeparator() {
 64         if (!first()) {
 65             comma().space();
 66         }
 67         return self();
 68     }
 69 
 70     public T spaceSeparatedList() {
 71         return startList();
 72     }
 73 
 74     public T spaceSeparator() {
 75         if (!first()) {
 76             space();
 77         }
 78         return self();
 79     }
 80 
 81     public T newlineSeparatedList() {
 82         return startList();
 83     }
 84 
 85     public T newlineSeparator() {
 86         if (!first()) {
 87             nl();
 88         }
 89         return self();
 90     }
 91 
 92     public T semicolonSeparatedList() {
 93         return startList();
 94     }
 95 
 96     public T semicolonSeparator() {
 97         if (!first()) {
 98             semicolon();
 99         }
100         return self();
101     }
102 
103     public T semicolonSpaceSeparatedList() {
104         return startList();
105     }
106 
107     public T semicolonSpaceSeparator() {
108         if (!first()) {
109             semicolon().space();
110         }
111         return self();
112     }
113 
114     public T dot() {
115         return op(".");
116     }
117 
118 
119     public T equal() {
120         return op("=");
121     }
122 
123 
124     public T plusplus() {
125         return op("++");
126     }
127 
128 
129     public T minusminus() {
130         return op("--");
131     }
132 
133     public T lineComment(String line) {
134         return op("//").space().comment(line).nl();
135     }
136 
137 
138     public T blockComment(String block) {
139         return op("/*").nl().comment(block).nl().op("*/").nl();
140     }
141 
142     public T newKeyword() {
143         return keyword("new");
144     }
145 
146 
147     public T staticKeyword() {
148         return keyword("static");
149     }
150 
151 
152     public T constKeyword() {
153         return keyword("const");
154     }
155 
156     public T ifKeyword() {
157         return keyword("if");
158 
159     }
160 
161 
162     public T whileKeyword() {
163         return keyword("while");
164     }
165 
166 
167     public T breakKeyword() {
168         return keyword("break");
169 
170     }
171 
172 
173     public T continueKeyword() {
174         return keyword("continue");
175     }
176 
177 
178     public T query() {
179         return op("?");
180     }
181 
182 
183     public T colon() {
184         return op(":");
185     }
186 
187 
188     public T nullKeyword() {
189         return keyword("null");
190 
191     }
192 
193 
194     public T elseKeyword() {
195         return keyword("else");
196     }
197 
198 
199     public T returnKeyword() {
200         return keyword("return");
201     }
202 
203 
204     public T switchKeyword() {
205         return keyword("switch");
206     }
207 
208 
209     public T caseKeyword() {
210         return keyword("case");
211     }
212 
213 
214     public T defaultKeyword() {
215         return keyword("default");
216     }
217 
218     public T doKeyword() {
219         return keyword("do");
220     }
221 
222     public T forKeyword() {
223         return keyword("for");
224     }
225 
226     public T ampersand() {
227         return op("&");
228     }
229 
230     public T braced(NestedRendererSAM<T> nb) {
231         return nb.build(obrace().nl().in()).out().cbrace().self();
232     }
233 
234     public T osbrace() {
235         return open("[");
236     }
237 
238 
239     public T csbrace() {
240         return close("]");
241     }
242 
243 
244     public T parenthesized(NestedRendererSAM<T> nb) {
245         return nb.build(oparen().in()).out().cparen().self();
246     }
247 
248     public T underscore() {
249         return op("_");
250     }
251 
252     public T oparen() {
253         return open("(");
254     }
255 
256     public T cparen() {
257         return close(")");
258     }
259 
260     public T obrace() {
261         return open("{");
262     }
263 
264     public T cbrace() {
265         return close("}");
266     }
267 
268     public T at() {
269         return op("@").self();
270     }
271 
272     public T caret() {
273         return op("^").self();
274     }
275 
276     public T percent() {
277         return op("%").self();
278     }
279 
280     public T pipe() {
281         return op("|").self();
282     }
283 
284     public T rarrow() {
285         return op("->").self();
286     }
287 
288     public T larrow() {
289         return op("<-").self();
290     }
291 
292     public T lt() {
293         return op("<").self();
294     }
295 
296     public T gt() {
297         return op(">").self();
298     }
299 
300     public T asterisk() {
301         return op("*").self();
302     }
303 }