@@ -72,6 +72,9 @@ public class StringTokenScannerSymbols extends TokenScannerSymbols {
7272 private final String blockEndString ;
7373 private final String commentStartString ;
7474 private final String commentEndString ;
75+ // Optional; null means disabled.
76+ private final String lineStatementPrefix ;
77+ private final String lineCommentPrefix ;
7578
7679 private StringTokenScannerSymbols (Builder builder ) {
7780 this .variableStartString = builder .variableStartString ;
@@ -80,6 +83,8 @@ private StringTokenScannerSymbols(Builder builder) {
8083 this .blockEndString = builder .blockEndString ;
8184 this .commentStartString = builder .commentStartString ;
8285 this .commentEndString = builder .commentEndString ;
86+ this .lineStatementPrefix = builder .lineStatementPrefix ;
87+ this .lineCommentPrefix = builder .lineCommentPrefix ;
8388 }
8489
8590 // ── Abstract char contract — returns sentinels only ───────────────────────
@@ -164,6 +169,16 @@ public String getClosingComment() {
164169 return commentEndString ;
165170 }
166171
172+ @ Override
173+ public String getLineStatementPrefix () {
174+ return lineStatementPrefix ;
175+ }
176+
177+ @ Override
178+ public String getLineCommentPrefix () {
179+ return lineCommentPrefix ;
180+ }
181+
167182 // ── isStringBased flag ────────────────────────────────────────────────────
168183
169184 @ Override
@@ -187,6 +202,8 @@ public static final class Builder {
187202 private String blockEndString = "%}" ;
188203 private String commentStartString = "{#" ;
189204 private String commentEndString = "#}" ;
205+ private String lineStatementPrefix = null ; // disabled by default
206+ private String lineCommentPrefix = null ; // disabled by default
190207
191208 public Builder withVariableStartString (String s ) {
192209 this .variableStartString = requireNonEmpty (s , "variableStartString" );
@@ -218,6 +235,26 @@ public Builder withCommentEndString(String s) {
218235 return this ;
219236 }
220237
238+ /**
239+ * Sets the line statement prefix (e.g. {@code "%%"}). A line beginning with
240+ * this prefix is treated as a block tag, equivalent to wrapping its content
241+ * in the configured block delimiters. Pass {@code null} to disable (default).
242+ */
243+ public Builder withLineStatementPrefix (String s ) {
244+ this .lineStatementPrefix = s ;
245+ return this ;
246+ }
247+
248+ /**
249+ * Sets the line comment prefix (e.g. {@code "%#"}). A line beginning with
250+ * this prefix is stripped entirely from the output. Pass {@code null} to
251+ * disable (default).
252+ */
253+ public Builder withLineCommentPrefix (String s ) {
254+ this .lineCommentPrefix = s ;
255+ return this ;
256+ }
257+
221258 public StringTokenScannerSymbols build () {
222259 return new StringTokenScannerSymbols (this );
223260 }
0 commit comments