in doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownSink.java [243:295]
private String escapeMarkdown(LastTwoLinesBufferingWriter writer, String text) {
if (text == null) {
return "";
}
text = escapeHtml(writer, text); // assume UTF-8 output, i.e. only use the mandatory XML entities
int length = text.length();
StringBuilder buffer = new StringBuilder(length);
for (int i = 0; i < length; ++i) {
char c = text.charAt(i);
switch (c) {
case '\\':
case '_':
case '`':
case '[':
case ']':
case '(':
case ')':
case '!':
// always escape the previous characters as potentially everywhere relevant
buffer.append(escapeMarkdown(c));
break;
case '*':
case '+':
case '-':
// only relevant for unordered lists or horizontal rules
if (isInBlankLine(buffer, writer)) {
buffer.append(escapeMarkdown(c));
} else {
buffer.append(c);
}
break;
case '=':
case '#':
if (this == HEADING || isInBlankLine(buffer, writer)) {
buffer.append(escapeMarkdown(c));
} else {
buffer.append(c);
}
break;
case '.':
if (isAfterDigit(buffer, writer)) {
buffer.append(escapeMarkdown(c));
} else {
buffer.append(c);
}
break;
default:
buffer.append(c);
}
}
return buffer.toString();
}