X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fparser%2FWikiTokenizer.java;h=111f131be2308cb40ab8e8d5739314fc0a6dde89;hb=90247c9eb280bd2b55f9b2b2816bad03a0821a7f;hp=6c81749006ea96d5dfe362459206d9ded25cf7e0;hpb=52123581b0c4aa46298b9d6cbc4697accffc1cc7;p=DictionaryPC.git diff --git a/src/com/hughes/android/dictionary/parser/WikiTokenizer.java b/src/com/hughes/android/dictionary/parser/WikiTokenizer.java index 6c81749..111f131 100644 --- a/src/com/hughes/android/dictionary/parser/WikiTokenizer.java +++ b/src/com/hughes/android/dictionary/parser/WikiTokenizer.java @@ -24,15 +24,56 @@ import java.util.regex.Pattern; public final class WikiTokenizer { public static interface Callback { - void onPlainText(WikiTokenizer wikiTokenizer); + void onPlainText(final String text); void onMarkup(WikiTokenizer wikiTokenizer); void onWikiLink(WikiTokenizer wikiTokenizer); void onNewline(WikiTokenizer wikiTokenizer); - void onFunction(String functionName, List functionPositionArgs, + 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); + } + + public static class DoNothingCallback implements Callback { + + @Override + public void onPlainText(String text) { + } + + @Override + public void onMarkup(WikiTokenizer wikiTokenizer) { + } + + @Override + public void onWikiLink(WikiTokenizer wikiTokenizer) { + } + + @Override + public void onNewline(WikiTokenizer wikiTokenizer) { + } + + @Override + public void onFunction(WikiTokenizer tokenizer, String functionName, + List functionPositionArgs, Map functionNamedArgs) { + } + + @Override + public void onHeading(WikiTokenizer wikiTokenizer) { + } + + @Override + public void onListItem(WikiTokenizer wikiTokenizer) { + } + + @Override + public void onComment(WikiTokenizer wikiTokenizer) { + } + + @Override + public void onHtml(WikiTokenizer wikiTokenizer) { + } } //private static final Pattern wikiTokenEvent = Pattern.compile("($)", Pattern.MULTILINE); @@ -67,6 +108,7 @@ public final class WikiTokenizer { private boolean isComment; private boolean isFunction; private boolean isWikiLink; + private boolean isHtml; private int firstUnescapedPipePos; private int lastUnescapedPipePos; @@ -80,7 +122,7 @@ public final class WikiTokenizer { } public WikiTokenizer(final String wikiText, final boolean isNewline) { - this.wikiText = wikiText; + this.wikiText = wikiText.replaceAll("\u2028", "\n"); this.matcher = wikiTokenEvent.matcher(wikiText); justReturnedNewline = isNewline; } @@ -97,6 +139,7 @@ public final class WikiTokenizer { isComment = false; isFunction = false; isWikiLink = false; + isHtml = false; firstUnescapedPipePos = -1; lastUnescapedPipePos = -1; @@ -104,31 +147,53 @@ public final class WikiTokenizer { positionArgs.clear(); namedArgs.clear(); } - - public void dispatch(final Callback callback) { - while (nextToken() != null) { - if (isPlainText()) { - callback.onPlainText(this); - } else if (isMarkup()) { - callback.onMarkup(this); - } else if (isWikiLink) { - callback.onWikiLink(this); - } else if (isNewline()) { - callback.onNewline(this); - } else if (isFunction()) { - callback.onFunction(functionName(), functionPositionArgs(), functionNamedArgs()); - } else if (isHeading()) { - callback.onHeading(this); - } else if (isListItem()) { - callback.onListItem(this); - } else if (isComment()) { - callback.onComment(this); - } else { - throw new IllegalStateException("Unknown wiki state."); + + private static final Pattern POSSIBLE_WIKI_TEXT = Pattern.compile( + "\\{\\{|" + + "\\[\\[|" + + "