Skip to content

Commit 92eca37

Browse files
author
fjn
committed
+ add a custom legacy override: useWhitespaceAfterStartToken
1 parent 84a226d commit 92eca37

3 files changed

Lines changed: 43 additions & 10 deletions

File tree

src/main/java/com/hubspot/jinjava/LegacyOverrides.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ public class LegacyOverrides {
99
private final boolean evaluateMapKeys;
1010
private final boolean iterateOverMapKeys;
1111
private final boolean usePyishObjectMapper;
12+
private final boolean useWhitespaceAfterStartToken;
1213

1314
private LegacyOverrides(Builder builder) {
1415
evaluateMapKeys = builder.evaluateMapKeys;
1516
iterateOverMapKeys = builder.iterateOverMapKeys;
1617
usePyishObjectMapper = builder.usePyishObjectMapper;
18+
useWhitespaceAfterStartToken = builder.useWhitespaceAfterStartToken;
1719
}
1820

1921
public static Builder newBuilder() {
@@ -32,10 +34,15 @@ public boolean isUsePyishObjectMapper() {
3234
return usePyishObjectMapper;
3335
}
3436

37+
public boolean isUseWhitespaceAfterStartToken(){
38+
return useWhitespaceAfterStartToken;
39+
}
40+
3541
public static class Builder {
3642
private boolean evaluateMapKeys = false;
3743
private boolean iterateOverMapKeys = false;
3844
private boolean usePyishObjectMapper = false;
45+
private boolean useWhitespaceAfterStartToken = false;
3946

4047
private Builder() {}
4148

@@ -47,7 +54,8 @@ public static Builder from(LegacyOverrides legacyOverrides) {
4754
return new Builder()
4855
.withEvaluateMapKeys(legacyOverrides.evaluateMapKeys)
4956
.withIterateOverMapKeys(legacyOverrides.iterateOverMapKeys)
50-
.withUsePyishObjectMapper(legacyOverrides.usePyishObjectMapper);
57+
.withUsePyishObjectMapper(legacyOverrides.usePyishObjectMapper)
58+
.withUseWhitespaceAfterStartToken(legacyOverrides.useWhitespaceAfterStartToken);
5159
}
5260

5361
public Builder withEvaluateMapKeys(boolean evaluateMapKeys) {
@@ -64,5 +72,10 @@ public Builder withUsePyishObjectMapper(boolean usePyishObjectMapper) {
6472
this.usePyishObjectMapper = usePyishObjectMapper;
6573
return this;
6674
}
75+
76+
public Builder withUseWhitespaceAfterStartToken(boolean useWhitespace){
77+
this.useWhitespaceAfterStartToken = useWhitespace;
78+
return this;
79+
}
6780
}
6881
}

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

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,13 @@ private Token getNextToken() {
8888
if (c == symbols.getPrefix()) {
8989
if (currPost < length) {
9090
c = is[currPost];
91-
boolean hasNextChar = (currPost + 1) < length;
92-
boolean nextCharIsWhitespace = hasNextChar && (' ' == is[currPost + 1]);
93-
if (nextCharIsWhitespace) {
91+
boolean startTokenFound = true;
92+
if(config.getLegacyOverrides().isUseWhitespaceAfterStartToken()){
93+
boolean hasNextChar = (currPost + 1) < length;
94+
boolean nextCharIsWhitespace = hasNextChar && (' ' == is[currPost + 1]);
95+
startTokenFound = nextCharIsWhitespace;
96+
}
97+
if (startTokenFound) {
9498
if (c == symbols.getNote()) {
9599
if (inComment == 1 || inRaw == 1) {
96100
continue;

src/test/java/com/hubspot/jinjava/tree/parse/TokenScannerTest.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import java.nio.charset.StandardCharsets;
1111
import java.util.List;
1212
import java.util.stream.Collectors;
13+
14+
import com.hubspot.jinjava.LegacyOverrides;
1315
import org.apache.commons.lang3.StringUtils;
1416
import org.junit.Before;
1517
import org.junit.Test;
@@ -260,8 +262,18 @@ public void testEscapedQuoteWithinAttrValue() {
260262
}
261263

262264
@Test
263-
public void testCommentWith$Char(){
265+
public void testCommentWithWhitespaceChar(){
264266
List<Token> tokens = tokens("comment-without-whitespace");
267+
assertThat(tokens.get(0).content.trim()).isEqualTo("$");
268+
269+
LegacyOverrides legacyOverrides = LegacyOverrides.newBuilder()
270+
.withUseWhitespaceAfterStartToken(true)
271+
.build();
272+
JinjavaConfig config = JinjavaConfig.newBuilder()
273+
.withLegacyOverrides(legacyOverrides)
274+
.build();
275+
TokenScanner scanner = fixture("comment-without-whitespace", config);
276+
tokens = Lists.newArrayList(scanner);
265277
assertThat(tokens.get(0).content.trim()).isEqualTo("${#array[@]}");
266278
}
267279

@@ -298,13 +310,17 @@ private List<Token> tokens(String fixture) {
298310
}
299311

300312
private TokenScanner fixture(String fixture) {
313+
return fixture(fixture, config);
314+
}
315+
316+
private TokenScanner fixture(String fixture, JinjavaConfig config) {
301317
try {
302318
return new TokenScanner(
303-
Resources.toString(
304-
Resources.getResource(String.format("parse/tokenizer/%s.jinja", fixture)),
305-
StandardCharsets.UTF_8
306-
),
307-
config
319+
Resources.toString(
320+
Resources.getResource(String.format("parse/tokenizer/%s.jinja", fixture)),
321+
StandardCharsets.UTF_8
322+
),
323+
config
308324
);
309325
} catch (Exception e) {
310326
throw new RuntimeException(e);

0 commit comments

Comments
 (0)