package fi.iki.elonen; import org.pegdown.PegDownProcessor; import java.io.*; import java.util.Map; import static fi.iki.elonen.NanoHTTPD.MIME_HTML; import static fi.iki.elonen.NanoHTTPD.Response.Status.OK; /** * @author Paul S. Hawke (paul.hawke@gmail.com) * On: 9/13/13 at 4:03 AM */ public class MarkdownWebServerPlugin implements WebServerPlugin { private final PegDownProcessor processor; public MarkdownWebServerPlugin() { processor = new PegDownProcessor(); } @Override public void initialize(Map commandLineOptions) { } @Override public boolean canServeUri(String uri, File rootDir) { File f = new File(rootDir, uri); return f.exists(); } @Override public NanoHTTPD.Response serveFile(String uri, Map headers, NanoHTTPD.IHTTPSession session, File file, String mimeType) { String markdownSource = readSource(file); return markdownSource == null ? null : new NanoHTTPD.Response(OK, MIME_HTML, processor.markdownToHtml(markdownSource)); } private String readSource(File file) { FileReader fileReader = null; BufferedReader reader = null; try { fileReader = new FileReader(file); reader = new BufferedReader(fileReader); String line = null; StringBuilder sb = new StringBuilder(); do { line = reader.readLine(); if (line != null) { sb.append(line).append("\n"); } } while (line != null); reader.close(); return sb.toString(); } catch (Exception e) { e.printStackTrace(); return null; } finally { try { if (fileReader != null) { fileReader.close(); } if (reader != null) { reader.close(); } } catch (IOException ignored) {} } } }