Skip to content

Commit dcc95c6

Browse files
committed
refactor: replace primitive titleDelimiter char with TitleDelimiter enum
1 parent 9005618 commit dcc95c6

1 file changed

Lines changed: 33 additions & 14 deletions

File tree

commonmark/src/main/java/org/commonmark/internal/LinkReferenceDefinitionParser.java

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class LinkReferenceDefinitionParser {
2828

2929
private StringBuilder label;
3030
private String destination;
31-
private char titleDelimiter;
31+
private TitleDelimiter titleDelimiter;
3232
private StringBuilder title;
3333
private boolean referenceValid = false;
3434

@@ -205,35 +205,26 @@ private boolean startTitle(Scanner scanner) {
205205
return true;
206206
}
207207

208-
titleDelimiter = '\0';
209208
char c = scanner.peek();
210-
switch (c) {
211-
case '"':
212-
case '\'':
213-
titleDelimiter = c;
214-
break;
215-
case '(':
216-
titleDelimiter = ')';
217-
break;
218-
}
209+
titleDelimiter = TitleDelimiter.fromOpeningChar(c);
219210

220-
if (titleDelimiter != '\0') {
211+
if (titleDelimiter != null) {
221212
state = State.TITLE;
222213
title = new StringBuilder();
223214
scanner.next();
224215
if (!scanner.hasNext()) {
225216
title.append('\n');
226217
}
227218
} else {
228-
// There might be another reference instead, try that for the same character.
219+
229220
state = State.START_DEFINITION;
230221
}
231222
return true;
232223
}
233224

234225
private boolean title(Scanner scanner) {
235226
Position start = scanner.position();
236-
if (!LinkScanner.scanLinkTitleContent(scanner, titleDelimiter)) {
227+
if (!LinkScanner.scanLinkTitleContent(scanner, titleDelimiter.getClosingChar())) {
237228
// Invalid title, stop. Title collected so far must not be used.
238229
title = null;
239230
return false;
@@ -307,4 +298,32 @@ enum State {
307298
// End state, no matter what kind of lines we add, they won't be references
308299
PARAGRAPH,
309300
}
301+
private enum TitleDelimiter {
302+
DOUBLE_QUOTE('"'),
303+
SINGLE_QUOTE('\''),
304+
PARENTHESIS(')');
305+
306+
private final char closingChar;
307+
308+
TitleDelimiter(char closingChar) {
309+
this.closingChar = closingChar;
310+
}
311+
312+
public char getClosingChar() {
313+
return closingChar;
314+
}
315+
316+
public static TitleDelimiter fromOpeningChar(char c) {
317+
switch (c) {
318+
case '"':
319+
return DOUBLE_QUOTE;
320+
case '\'':
321+
return SINGLE_QUOTE;
322+
case '(':
323+
return PARENTHESIS;
324+
default:
325+
return null;
326+
}
327+
}
328+
}
310329
}

0 commit comments

Comments
 (0)