X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fparser%2FWikiTokenizer.java;h=b79013d2726847f1370170104ddb668d05afe5a8;hb=6e732a6929b997865f763c26f5bbfd6dbf35c4fe;hp=4377d8a2c9fabc01111bc628672fe9115d539bf9;hpb=a8052a74747df9244c098041dc82c745f64d51c6;p=DictionaryPC.git diff --git a/src/com/hughes/android/dictionary/parser/WikiTokenizer.java b/src/com/hughes/android/dictionary/parser/WikiTokenizer.java index 4377d8a..b79013d 100644 --- a/src/com/hughes/android/dictionary/parser/WikiTokenizer.java +++ b/src/com/hughes/android/dictionary/parser/WikiTokenizer.java @@ -22,7 +22,20 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public final class WikiTokenizer { - + + public static interface Callback { + void onPlainText(final String text); + void onMarkup(WikiTokenizer wikiTokenizer); + void onWikiLink(WikiTokenizer wikiTokenizer); + void onNewline(WikiTokenizer wikiTokenizer); + void onFunction(final WikiTokenizer tokenizer, String functionName, List functionPositionArgs, + Map functionNamedArgs); + void onHeading(WikiTokenizer wikiTokenizer); + void onListItem(WikiTokenizer wikiTokenizer); + void onComment(WikiTokenizer wikiTokenizer); + void onHtml(WikiTokenizer wikiTokenizer); + } + //private static final Pattern wikiTokenEvent = Pattern.compile("($)", Pattern.MULTILINE); private static final Pattern wikiTokenEvent = Pattern.compile("(" + "\\{\\{|\\}\\}|" + @@ -55,6 +68,7 @@ public final class WikiTokenizer { private boolean isComment; private boolean isFunction; private boolean isWikiLink; + private boolean isHtml; private int firstUnescapedPipePos; private int lastUnescapedPipePos; @@ -64,10 +78,15 @@ public final class WikiTokenizer { public WikiTokenizer(final String wikiText) { + this(wikiText, true); + } + + public WikiTokenizer(final String wikiText, final boolean isNewline) { this.wikiText = wikiText; this.matcher = wikiTokenEvent.matcher(wikiText); + justReturnedNewline = isNewline; } - + private void clear() { errors.clear(); tokenStack.clear(); @@ -80,6 +99,7 @@ public final class WikiTokenizer { isComment = false; isFunction = false; isWikiLink = false; + isHtml = false; firstUnescapedPipePos = -1; lastUnescapedPipePos = -1; @@ -87,6 +107,48 @@ public final class WikiTokenizer { positionArgs.clear(); namedArgs.clear(); } + + private static final Pattern POSSIBLE_WIKI_TEXT = Pattern.compile( + "\\{\\{|" + + "\\[\\[|" + + "