package sagan.support.markdown; import org.parboiled.common.StringUtils; import org.pegdown.Printer; import org.pegdown.VerbatimSerializer; import org.pegdown.ast.VerbatimNode; /** * This custom {@link org.pegdown.VerbatimSerializer} will replace the default one in Pegdown. * It is quite similar to the {@link org.pegdown.DefaultVerbatimSerializer}, but prints an additional * {@code class="prettyprint"} HTML attribute in order to trigger the JavaScript google-code-prettify library. * @see sagan.blog.support.PegdownMarkdownService */ public class PrettifyVerbatimSerializer implements VerbatimSerializer { public static final PrettifyVerbatimSerializer INSTANCE = new PrettifyVerbatimSerializer(); @Override public void serialize(final VerbatimNode node, final Printer printer) { printer.println().print("<pre><code"); String className = "prettyprint"; if (!StringUtils.isEmpty(node.getType())) { className = className.concat(" " + node.getType()); } printAttribute(printer, "class", className); printer.print(">"); String text = node.getText(); // print HTML breaks for all initial newlines while (text.charAt(0) == '\n') { printer.print("<br/>"); text = text.substring(1); } printer.printEncoded(text); printer.print("</code></pre>"); } private void printAttribute(final Printer printer, final String name, final String value) { printer.print(' ').print(name).print('=').print('"').print(value).print('"'); } }