X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fparser%2FWikiTokenizer.java;h=111f131be2308cb40ab8e8d5739314fc0a6dde89;hb=90247c9eb280bd2b55f9b2b2816bad03a0821a7f;hp=ad14bc0c1826a2ab27a139909e6700df418f7de1;hpb=7573784eea75700436bb900861b93a6d53210fc8;p=DictionaryPC.git diff --git a/src/com/hughes/android/dictionary/parser/WikiTokenizer.java b/src/com/hughes/android/dictionary/parser/WikiTokenizer.java index ad14bc0..111f131 100644 --- a/src/com/hughes/android/dictionary/parser/WikiTokenizer.java +++ b/src/com/hughes/android/dictionary/parser/WikiTokenizer.java @@ -22,7 +22,60 @@ 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); + } + + 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); private static final Pattern wikiTokenEvent = Pattern.compile("(" + "\\{\\{|\\}\\}|" + @@ -55,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; @@ -68,9 +122,9 @@ 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 = false; + justReturnedNewline = isNewline; } private void clear() { @@ -85,6 +139,7 @@ public final class WikiTokenizer { isComment = false; isFunction = false; isWikiLink = false; + isHtml = false; firstUnescapedPipePos = -1; lastUnescapedPipePos = -1; @@ -92,6 +147,52 @@ public final class WikiTokenizer { positionArgs.clear(); namedArgs.clear(); } + + private static final Pattern POSSIBLE_WIKI_TEXT = Pattern.compile( + "\\{\\{|" + + "\\[\\[|" + + "