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 boolean isComment;
private boolean isFunction;
private boolean isWikiLink;
+ private boolean isHtml;
private int firstUnescapedPipePos;
private int lastUnescapedPipePos;
isComment = false;
isFunction = false;
isWikiLink = false;
+ isHtml = false;
firstUnescapedPipePos = -1;
lastUnescapedPipePos = -1;
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....
} else {
- throw new IllegalStateException("Unknown wiki state.");
+ throw new IllegalStateException("Unknown wiki state: " + tokenizer.token());
}
}
}
assert isFunction();
// "{{.."
if (firstUnescapedPipePos != -1) {
- return wikiText.substring(start + 2, firstUnescapedPipePos);
+ return trimNewlines(wikiText.substring(start + 2, firstUnescapedPipePos).trim());
}
- return wikiText.substring(start + 2, end - 2);
+ return trimNewlines(wikiText.substring(start + 2, end - 2).trim());
}
public List<String> functionPositionArgs() {
return null;
}
+ public boolean isHtml() {
+ return isHtml;
+ }
+
public boolean remainderStartsWith(final String prefix) {
return wikiText.startsWith(prefix, start);
}
if (wikiText.startsWith("<pre>", start)) {
end = safeIndexOf(wikiText, start, "</pre>", "\n");
+ isHtml = true;
return this;
}
if (wikiText.startsWith("<math>", start)) {
end = safeIndexOf(wikiText, start, "</math>", "\n");
+ isHtml = true;
return this;
}
if (lastUnescapedEqualsPos > lastUnescapedPipePos) {
final String key = wikiText.substring(lastUnescapedPipePos + 1, lastUnescapedEqualsPos);
final String value = wikiText.substring(lastUnescapedEqualsPos + 1, matchStart);
- namedArgs.put(key, value);
+ namedArgs.put(trimNewlines(key), trimNewlines(value));
} else {
final String value = wikiText.substring(lastUnescapedPipePos + 1, matchStart);
- positionArgs.add(value);
+ positionArgs.add(trimNewlines(value));
}
}
lastUnescapedPipePos = matchStart;
}
+
+ static final String trimNewlines(String s) {
+ while (s.startsWith("\n")) {
+ s = s.substring(1);
+ }
+ while (s.endsWith("\n")) {
+ s = s.substring(0, s.length() - 1);
+ }
+ return s.replaceAll("\n", " ");
+ }
static int safeIndexOf(final String s, final int start, final String target, final String backup) {
int close = s.indexOf(target, start);