package flow.netbeans.markdown; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; import org.pegdown.LinkRenderer; import org.pegdown.ToHtmlSerializer; import org.pegdown.ast.SuperNode; /** * * @author Holger Stenger */ public class PreviewSerializer extends ToHtmlSerializer { private final URL baseUrl; private final boolean resolveImageUrls; public PreviewSerializer(final URL baseUrl) { this(baseUrl, true, false); } public PreviewSerializer(URL baseUrl, boolean resolveImageUrls, boolean resolveLinkUrls) { super(new PreviewLinkRenderer(baseUrl, resolveLinkUrls)); this.baseUrl = baseUrl; this.resolveImageUrls = resolveImageUrls; } private String resolveUrl(final String url) { try { return baseUrl.toURI().resolve(url).toURL().toExternalForm(); } catch (URISyntaxException ex) { } catch (MalformedURLException ex) { } return url; } private String resolveImageUrl(final String url) { if (resolveImageUrls) { return resolveUrl(url); } else { return url; } } protected void printImageTag(SuperNode imageNode, String url) { printer.print("<img src=\"").print(resolveImageUrl(url)).print("\" alt=\"") .printEncoded(printChildrenToString(imageNode)).print("\" />"); } @Override protected void printImageTag(LinkRenderer.Rendering rendering) { printer.print("<img"); printAttribute("src", resolveImageUrl(rendering.href)); printAttribute("alt", rendering.text); for (LinkRenderer.Attribute attr : rendering.attributes) { printAttribute(attr.name, attr.value); } printer.print(" />"); } private void printAttribute(String name, String value) { printer.print(' ').print(name).print('=').print('"').print(value).print('"'); } }