-
- 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<String> functionPositionArgs,
- Map<String, String> 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<String> functionPositionArgs, Map<String, String> 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("(" +
- "\\{\\{|\\}\\}|" +
- "\\[\\[|\\]\\]|" +
- "\\||" + // Need the | because we might have to find unescaped pipes
- "=|" + // Need the = because we might have to find unescaped =
- "<!--|" +
- "''|" +
- "<pre>|" +
- "<math>|" +
- "<ref>|" +
- "$)", Pattern.MULTILINE);
- private static final String listChars = "*#:;";
-
-
- final String wikiText;
- final Matcher matcher;
-
- boolean justReturnedNewline = true;
- int lastLineStart = 0;
- int end = 0;
- int start = -1;
-
- final List<String> errors = new ArrayList<String>();
- final List<String> tokenStack = new ArrayList<String>();
-
-
- private String headingWikiText;
- private int headingDepth;
- private int listPrefixEnd;
- private boolean isPlainText;
- private boolean isMarkup;
- private boolean isComment;
- private boolean isFunction;
- private boolean isWikiLink;
- private boolean isHtml;
- private int firstUnescapedPipePos;
-
- private int lastUnescapedPipePos;
- private int lastUnescapedEqualsPos;
- private final List<String> positionArgs = new ArrayList<String>();
- private final Map<String,String> namedArgs = new LinkedHashMap<String,String>();
-
-
- public WikiTokenizer(final String wikiText) {
- this(wikiText, true);
- }
-
- public WikiTokenizer(String wikiText, final boolean isNewline) {
- wikiText = wikiText.replaceAll("\u2028", "\n");
- wikiText = wikiText.replaceAll("\u0085", "\n");
- this.wikiText = wikiText;
- this.matcher = wikiTokenEvent.matcher(wikiText);
- justReturnedNewline = isNewline;
- }
-
- private void clear() {
- errors.clear();
- tokenStack.clear();
-
- headingWikiText = null;
- headingDepth = -1;
- listPrefixEnd = -1;
- isPlainText = false;
- isMarkup = false;
- isComment = false;
- isFunction = false;
- isWikiLink = false;
- isHtml = false;
-
- firstUnescapedPipePos = -1;
- lastUnescapedPipePos = -1;
- lastUnescapedEqualsPos = -1;
- positionArgs.clear();
- namedArgs.clear();
- }
-
- private static final Pattern POSSIBLE_WIKI_TEXT = Pattern.compile(
- "\\{\\{|" +
- "\\[\\[|" +
- "<!--|" +
- "''|" +
- "<pre>|" +
- "<math>|" +
- "<ref>|" +
- "[\n]"
- );
-
- public static void dispatch(final String wikiText, final boolean isNewline, final Callback callback) {
- // Optimization...
- if (!POSSIBLE_WIKI_TEXT.matcher(wikiText).find()) {
- callback.onPlainText(wikiText);
- } else {
- final WikiTokenizer tokenizer = new WikiTokenizer(wikiText, isNewline);
- while (tokenizer.nextToken() != null) {
- if (tokenizer.isPlainText()) {
- callback.onPlainText(tokenizer.token());
- } else if (tokenizer.isMarkup()) {
- callback.onMarkup(tokenizer);
- } else if (tokenizer.isWikiLink) {
- callback.onWikiLink(tokenizer);
- } else if (tokenizer.isNewline()) {
- callback.onNewline(tokenizer);
- } else if (tokenizer.isFunction()) {
- callback.onFunction(tokenizer, tokenizer.functionName(), tokenizer.functionPositionArgs(), tokenizer.functionNamedArgs());
- } else if (tokenizer.isHeading()) {
- callback.onHeading(tokenizer);
- } else if (tokenizer.isListItem()) {
- callback.onListItem(tokenizer);
- } else if (tokenizer.isComment()) {
- callback.onComment(tokenizer);
- } else if (tokenizer.isHtml()) {
- callback.onHtml(tokenizer);
- } else if (!tokenizer.errors.isEmpty()) {
- // Log was already printed....
+
+ 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<String> functionPositionArgs,
+ Map<String, String> 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<String> functionPositionArgs, Map<String, String> 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("(" +
+ "\\{\\{|\\}\\}|" +
+ "\\[\\[|\\]\\]|" +
+ "\\||" + // Need the | because we might have to find unescaped pipes
+ "=|" + // Need the = because we might have to find unescaped =
+ "<!--|" +
+ "''|" +
+ "<pre>|" +
+ "<math>|" +
+ "<ref>|" +
+ "$)", Pattern.MULTILINE);
+ private static final String listChars = "*#:;";
+
+
+ final String wikiText;
+ final Matcher matcher;
+
+ boolean justReturnedNewline = true;
+ int lastLineStart = 0;
+ int end = 0;
+ int start = -1;
+
+ final List<String> errors = new ArrayList<String>();
+ final List<String> tokenStack = new ArrayList<String>();
+
+
+ private String headingWikiText;
+ private int headingDepth;
+ private int listPrefixEnd;
+ private boolean isPlainText;
+ private boolean isMarkup;
+ private boolean isComment;
+ private boolean isFunction;
+ private boolean isWikiLink;
+ private boolean isHtml;
+ private int firstUnescapedPipePos;
+
+ private int lastUnescapedPipePos;
+ private int lastUnescapedEqualsPos;
+ private final List<String> positionArgs = new ArrayList<String>();
+ private final Map<String,String> namedArgs = new LinkedHashMap<String,String>();
+
+
+ public WikiTokenizer(final String wikiText) {
+ this(wikiText, true);
+ }
+
+ public WikiTokenizer(String wikiText, final boolean isNewline) {
+ wikiText = wikiText.replace('\u2028', '\n');
+ wikiText = wikiText.replace('\u0085', '\n');
+ this.wikiText = wikiText;
+ this.matcher = wikiTokenEvent.matcher(wikiText);
+ justReturnedNewline = isNewline;
+ }
+
+ private void clear() {
+ errors.clear();
+ tokenStack.clear();
+
+ headingWikiText = null;
+ headingDepth = -1;
+ listPrefixEnd = -1;
+ isPlainText = false;
+ isMarkup = false;
+ isComment = false;
+ isFunction = false;
+ isWikiLink = false;
+ isHtml = false;
+
+ firstUnescapedPipePos = -1;
+ lastUnescapedPipePos = -1;
+ lastUnescapedEqualsPos = -1;
+ positionArgs.clear();
+ namedArgs.clear();
+ }
+
+ private static final Pattern POSSIBLE_WIKI_TEXT = Pattern.compile(
+ "\\{\\{|" +
+ "\\[\\[|" +
+ "<!--|" +
+ "''|" +
+ "<pre>|" +
+ "<math>|" +
+ "<ref>|" +
+ "[\n]"
+ );
+
+ public static void dispatch(final String wikiText, final boolean isNewline, final Callback callback) {
+ // Optimization...
+ if (!POSSIBLE_WIKI_TEXT.matcher(wikiText).find()) {
+ callback.onPlainText(wikiText);