Skip to content

Instantly share code, notes, and snippets.

@peas
Last active January 22, 2016 15:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save peas/ad01dc5c754ae8094e9c to your computer and use it in GitHub Desktop.
Save peas/ad01dc5c754ae8094e9c to your computer and use it in GitHub Desktop.
public class MarkdownNovo {
private static final ScriptEngine JAVASCRIPT;
static {
JAVASCRIPT = new ScriptEngineManager().getEngineByName("javascript");
try {
JAVASCRIPT.eval(new InputStreamReader(MarkdownNovo.class.getResourceAsStream("/marked.js")));
System.out.println(MarkdownNovo.class.getResourceAsStream("/marked.js"));
} catch (ScriptException e) {
throw new RuntimeException(e);
}
}
public static String parseNewHighlight(String content) {
if (content == null || content.trim().isEmpty())
return "";
return parse(content);
}
private static String parse(String content) {
try {
content = parseAudioTag(content);
Bindings b = JAVASCRIPT.getBindings(ScriptContext.ENGINE_SCOPE);
SimpleBindings sb = new SimpleBindings(new HashMap<>(b));
sb.put("content", content);
Object result = JAVASCRIPT.eval("marked(content)", sb);
String parsed = result.toString();
return parsed;
} catch (ScriptException e) {
throw new RuntimeException(e);
}
}
public static String parseAudioTag(String content) {
Pattern pattern = Pattern.compile(".*(http.*mp3)#(.*)");
Matcher matcher = pattern.matcher(content);
while (matcher.find()) {
String audioUrl = matcher.group(1);
String audioTitle = matcher.group(2);
StringBuilder builder = new StringBuilder().append("<div class=\"audioPlayer\">")
.append("<div class=\"audioPlayer-container\">").append("<div class=\"audioPlayer-titulo\">")
.append("<div class=\"audioPlayer-playback\">Playback</div>").append(audioTitle).append("</div>")
.append("<a class=\"button buttonAction audioPlayer-download\" href=\"").append(audioUrl)
.append("\" download target=\"_blank\">Download</a>").append("</div>")
.append("<audio class=\"audioPlayer-player\" src=\"").append(audioUrl).append("\" controls>")
.append("</audio>").append("</div>");
content = content.replace(matcher.group(), builder.toString());
}
return content;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment