From: Reimar Döffinger Date: Thu, 16 Apr 2020 21:11:58 +0000 (+0200) Subject: Optimize escapedFindEnd. X-Git-Url: http://gitweb.fperrin.net/?p=DictionaryPC.git;a=commitdiff_plain;h=15cb7acd69697acf9643396bf607e9b22fc73d08 Optimize escapedFindEnd. --- diff --git a/src/com/hughes/android/dictionary/parser/WikiTokenizer.java b/src/com/hughes/android/dictionary/parser/WikiTokenizer.java index 886e4f9..ca0193a 100644 --- a/src/com/hughes/android/dictionary/parser/WikiTokenizer.java +++ b/src/com/hughes/android/dictionary/parser/WikiTokenizer.java @@ -97,7 +97,7 @@ public final class WikiTokenizer { int start = -1; final List errors = new ArrayList<>(); - final List tokenStack = new ArrayList<>(); + final List tokenStack = new ArrayList<>(); private String headingWikiText; @@ -377,7 +377,7 @@ public final class WikiTokenizer { // Skip non-=... if (end < len) { final int nextNewline = safeIndexOf(wikiText, end, "\n", "\n"); - final int closingEquals = escapedFindEnd(end, "="); + final int closingEquals = escapedFindEnd(end, TokenDelim.EQUALS); if (wikiText.charAt(closingEquals - 1) == '=') { end = closingEquals - 1; } else { @@ -397,7 +397,7 @@ public final class WikiTokenizer { if (listChars.indexOf(firstChar) != -1) { while (++end < len && listChars.indexOf(wikiText.charAt(end)) != -1) {} listPrefixEnd = end; - end = escapedFindEnd(start, "\n"); + end = escapedFindEnd(start, TokenDelim.NEWLINE); return this; } } @@ -415,13 +415,13 @@ public final class WikiTokenizer { } if (wikiText.startsWith("[[", start)) { - end = escapedFindEnd(start + 2, "]]"); + end = escapedFindEnd(start + 2, TokenDelim.DBRACKET_CLOSE); isWikiLink = errors.isEmpty(); return this; } if (wikiText.startsWith("{{", start)) { - end = escapedFindEnd(start + 2, "}}"); + end = escapedFindEnd(start + 2, TokenDelim.BRACE_CLOSE); isFunction = errors.isEmpty(); return this; } @@ -501,66 +501,90 @@ public final class WikiTokenizer { return token; } + enum TokenDelim { NEWLINE, BRACE_OPEN, BRACE_CLOSE, DBRACKET_OPEN, DBRACKET_CLOSE, BRACKET_OPEN, BRACKET_CLOSE, PIPE, EQUALS, COMMENT } + + private int tokenDelimLen(TokenDelim d) { + switch (d) { + case NEWLINE: + case BRACKET_OPEN: + case BRACKET_CLOSE: + case PIPE: + case EQUALS: + return 1; + case BRACE_OPEN: + case BRACE_CLOSE: + case DBRACKET_OPEN: + case DBRACKET_CLOSE: + return 2; + case COMMENT: + return 4; + default: + throw new RuntimeException(); + } + } + static final String[] patterns = { "\n", "{{", "}}", "[[", "]]", "[", "]", "|", "=", "", matchStart); if (end == -1) { errors.add("Unmatched