Skip to content

Commit 5644792

Browse files
authored
Merge pull request #1346 from jediwhale/master
!define crashes when missing opening delimiter
2 parents 8a7dd3a + 3a03934 commit 5644792

File tree

5 files changed

+20
-18
lines changed

5 files changed

+20
-18
lines changed

src/fitnesse/wikitext/parser/Comment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ public class Comment extends SymbolType implements Rule, Translation {
44
public static final Comment symbolType = new Comment();
55

66
public Comment() {
7-
super("Comment", Newline);
7+
super("Comment");
88
wikiMatcher(new Matcher().startLine().string("#"));
99
wikiRule(this);
1010
htmlTranslation(this);

src/fitnesse/wikitext/parser/Define.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,16 @@ private Maybe<String> copyVariableValue(Parser parser, Symbol next) {
3939
}
4040

4141
private Maybe<String> parseVariableValue(Parser parser, Symbol next) {
42-
SymbolType close = next.getType().closeType();
43-
if (close == SymbolType.Empty) return Maybe.noString;
44-
return parser.parseToAsString(close);
42+
SymbolType nextType = next.getType();
43+
44+
// for backward compatibility: !define x<eof> is valid
45+
if (nextType == SymbolType.Empty) return new Maybe<>("");
46+
47+
if (nextType == SymbolType.OpenBrace) return parser.parseToAsString(SymbolType.CloseBrace);
48+
if (nextType == SymbolType.OpenBracket) return parser.parseToAsString(SymbolType.CloseBracket);
49+
if (nextType == SymbolType.OpenParenthesis) return parser.parseToAsString(SymbolType.CloseParenthesis);
50+
51+
return Maybe.noString;
4552
}
4653

4754
@Override

src/fitnesse/wikitext/parser/Literal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ public class Literal extends SymbolType implements Rule {
44
public static final Literal symbolType = new Literal();
55

66
public Literal() {
7-
super("Literal", CloseLiteral);
7+
super("Literal");
88
wikiMatcher(new Matcher().string("!-"));
99
wikiRule(this);
1010
}
1111

1212
@Override
1313
public Maybe<Symbol> parse(Symbol current, Parser parser) {
1414
SymbolType type = current.getType();
15-
String literal = parser.parseLiteral(closeType());
15+
String literal = parser.parseLiteral(CloseLiteral);
1616
if (parser.atEnd()) return Symbol.nothing;
1717
return new Maybe<>(new Symbol(type, literal));
1818
}

src/fitnesse/wikitext/parser/SymbolType.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ public class SymbolType implements Matchable {
7373
.wikiMatcher(new Matcher().startLineOrCell().string("!note"))
7474
.wikiRule(new LineRule())
7575
.htmlTranslation(Translate.with(ToHtml::note).child(0));
76-
public static final SymbolType OpenBrace = new SymbolType("OpenBrace", CloseBrace)
76+
public static final SymbolType OpenBrace = new SymbolType("OpenBrace")
7777
.wikiMatcher(new Matcher().string("{"));
7878

79-
public static final SymbolType OpenBracket = new SymbolType("OpenBracket", CloseBracket)
79+
public static final SymbolType OpenBracket = new SymbolType("OpenBracket")
8080
.wikiMatcher(new Matcher().string("["));
81-
public static final SymbolType OpenParenthesis = new SymbolType("OpenParenthesis", CloseParenthesis)
81+
public static final SymbolType OpenParenthesis = new SymbolType("OpenParenthesis")
8282
.wikiMatcher(new Matcher().string("("));
8383
public static final SymbolType OrderedList = new SymbolType("OrderedList")
8484
.wikiMatcher(new Matcher().startLine().whitespace().listDigit().string(" "))
@@ -106,14 +106,10 @@ public class SymbolType implements Matchable {
106106
private final List<Matcher> wikiMatchers = new ArrayList<>(1);
107107
private Rule wikiRule = defaultRule;
108108
private Translation htmlTranslation = null;
109-
private final SymbolType closeType;
110109
private final List<ParsedSymbolDecorator> decorators = new LinkedList<>();
111110

112-
public SymbolType(String name) { this(name, Empty); }
113-
114-
public SymbolType(String name, SymbolType closeType) {
111+
public SymbolType(String name) {
115112
this.name = name;
116-
this.closeType = closeType;
117113
}
118114

119115
public List<Matcher> getWikiMatchers() { return wikiMatchers; }
@@ -151,10 +147,6 @@ public SymbolMatch makeMatch(ScanString input, SymbolStream symbols) {
151147
return SymbolMatch.noMatch;
152148
}
153149

154-
public SymbolType closeType() {
155-
return closeType;
156-
}
157-
158150
public void addDecorator(ParsedSymbolDecorator symbolDecorator) {
159151
decorators.add(symbolDecorator);
160152
}

test/fitnesse/wikitext/parser/DefineTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ public void parsesDefine() {
2121
assertParses("!define x {y}", "SymbolList[Define[Text, Text]]");
2222
assertParses("!define x {y" /* eof */, "SymbolList[Define[Text, Text]]");
2323
assertParses("!define x" /* eof */, "SymbolList[Define[Text, Text]]");
24+
}
2425

26+
@Test public void parsesMissingBraces() {
27+
assertParses("!define x +1 stuff", "SymbolList[Text, Whitespace, Text, Whitespace, Delta, Whitespace, Text]");
2528
}
2629

2730
@Test

0 commit comments

Comments
 (0)