Skip to content

Commit 6127243

Browse files
committed
Support single line logic for blocks and comments using a prefix
1 parent 677aa06 commit 6127243

File tree

4 files changed

+484
-143
lines changed

4 files changed

+484
-143
lines changed

src/main/java/com/hubspot/jinjava/tree/parse/StringTokenScannerSymbols.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)