in src/main/java/org/apache/tomee/website/Examples.java [192:290]
private static String mdToAdoc(final String s) {
final Pattern link = Pattern.compile("(.*)\\[([^\\]]*)\\]\\(([^\\)]*)\\)(.*)");
try (final StringWriter writer = new StringWriter();
final BufferedReader reader = new BufferedReader(new StringReader(s))) {
String line;
while ((line = reader.readLine()) != null) {
if (line.startsWith("Title: ")) {
continue;
}
if (line.startsWith("#")) {
for (int i = 0; i < line.length(); i++) {
if (line.charAt(i) == '#') {
writer.append('=');
} else {
writer.append(" ").append(line.substring(i));
break;
}
}
} else if (line.startsWith(" package") || line.startsWith(" import") || line.startsWith(" public ") || line.startsWith(" @")) { // java code
writer.append("\n[source,java]\n----\n");
writer.append(line.replaceFirst(" ", "")).append('\n');
while ((line = reader.readLine()) != null) {
writer.append(line.replaceFirst(" ", "")).append('\n');
if (" }".equals(line)) {
writer.append("----\n");
break;
}
}
} else if (line.startsWith(" <")) { // xml code
writer.append("\n[source,xml]\n----\n");
if (line.startsWith(" <?")) { // prolog
writer.append(line.replaceFirst(" ", "")).append('\n');
line = reader.readLine();
}
while (line != null && line.trim().isEmpty()) {
line = reader.readLine();
}
if (line.trim().startsWith("<!--")) {
if (line.contains("-->")) {
writer.append(line.replaceFirst(" ", "")).append('\n');
} else {
do {
writer.append(line.replaceFirst(" ", "")).append('\n');
} while ((line = reader.readLine()) != null && !line.trim().equals("-->"));
writer.append(line.replaceFirst(" ", "")).append('\n');
}
line = reader.readLine();
while (line != null && line.trim().isEmpty()) {
line = reader.readLine();
}
}
if (line.trim().endsWith("/>")) {
writer.append(line.replaceFirst(" ", "")).append('\n');
writer.append("----\n");
} else {
final int space = line.indexOf(' ', 5);
final String end = "</" + line.substring(5, space < 0 ? line.indexOf('>') : space) + ">";
writer.append(line.replaceFirst(" ", "")).append('\n');
while ((line = reader.readLine()) != null) {
writer.append(line.replaceFirst(" ", "")).append('\n');
if (end.equals(line.trim())) {
writer.append("----\n");
break;
}
}
}
} else if (line.startsWith(" -------------------------------------------------------")) { // run output
writer.append("\n[source]\n----\n");
writer.append(line.replaceFirst(" ", "")).append('\n');
while ((line = reader.readLine()) != null) {
writer.append(line.replaceFirst(" ", "")).append('\n');
if (line.startsWith(" Tests run:") && !line.contains("Time elapsed:")) {
writer.append("----\n");
break;
}
}
} else if (line.startsWith(">")) {
writer.append("\nNOTE: ").append(line.substring(1)).append("\n");
} else {
final Matcher matcher = link.matcher(line);
if (matcher.matches()) {
String l = matcher.group(3);
if (l.startsWith("../") && l.endsWith("README.html")) { // hack for old relative links
l = l.substring("../".length(), l.length() - "/README.html".length()) + ".html";
}
writer.append(matcher.group(1)).append("link:").append(l).append('[').append(matcher.group(2)).append(']').append(matcher.group(4));
} else {
writer.append(line);
}
}
writer.append('\n');
}
return writer.toString();
} catch (final IOException e) {
throw new IllegalStateException(e);
}
}