En ce qui concerne le processeur Markdown, je pense qu'il existe des bibliothèques relativement bien connues en Perl (famille principale) / Python / Ruby / JavaScript, etc., mais en ce qui concerne Java, je n'en ai pas entendu beaucoup (ou plutôt standard). Je n'ai rien) je ressens.
État actuel (2017-03-02) En regardant à travers le processeur Java Markdown trouvé en open-source, il est toujours en développement actif et semble être satisfaisant en termes de fonctionnalité et de vitesse flexmark-java Je l'ai touché un peu, donc c'est une introduction légère.
Markdown est célèbre pour avoir de nombreux dialectes comme mentionné ci-dessus, mais c'est presque la même chose, et j'aimerais le couvrir avec une seule implémentation si possible. Ainsi flexmark-java couvre de nombreux dialectes en le rendant étendu (type de plug-in?).
// https://github.com/vsch/flexmark-java/wiki/Exemple d'utilisation modifiée
import com.vladsch.flexmark.ast.Node;
import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.parser.ParserEmulationProfile;
import com.vladsch.flexmark.util.options.MutableDataHolder;
import com.vladsch.flexmark.util.options.MutableDataSet;
import com.vladsch.flexmark.ext.abbreviation.AbbreviationExtension;
import com.vladsch.flexmark.ext.definition.DefinitionExtension;
import com.vladsch.flexmark.ext.footnotes.FootnoteExtension;
import com.vladsch.flexmark.ext.tables.TablesExtension;
import com.vladsch.flexmark.ext.typographic.TypographicExtension;
public class RenderingExamples {
//Définir les options pour chaque dialecte Markdown
private MutableHolder getOptions(String type) {
MutableDataHolder options = new MutableDataSet();
switch (type) {
case "markdown":
options.setFrom(ParserEmulationProfile.MARKDOWN);
break;
case "multimarkdown":
options.setFrom(ParserEmulationProfile.MULTI_MARKDOWN);
break;
case "kramdown":
options.setFrom(ParserEmulationProfile.KRAMDOWN);
options.set(Parser.EXTENSIONS, Arrays.asList(
AbbreviationExtension.create(),
DefinitionExtension.create(),
FootnoteExtension.create(),
TablesExtension.create(),
TypographicExtension.create()
));
break;
}
return options;
}
//Générer un analyseur pour chaque dialecte
private Parser getParser(String type) {
switch (type) {
case "commonmark":
return Parser.builder().build();
default:
return Parser.builder(getOptions(type)).build();
}
}
//Générer un moteur de rendu pour chaque dialecte
private HtmlRenderer getHtmlRenderer(String type) {
switch (type) {
case "commonmark":
return HtmlRenderer.builder().build();
default:
return HtmlRenderer.builder(getOptions(type)).build();
}
}
//Rendu HTML!
public String render(String markdownText, String type) {
Node document = getParser(type).parse(markdownText);
return getHtmlRenderer(type).render(document);
}
}
Il semble qu'il existe également un moyen pour les frères de jouer seuls avec le Node analysé.
// https://github.com/vsch/flexmark-java/wiki/Exemple d'utilisation modifiée
import com.vladsch.flexmark.ast.Node;
import com.vladsch.flexmark.ast.NodeVisitor;
import com.vladsch.flexmark.ast.Text;
import com.vladsch.flexmark.ast.VisitHandler;
public class NodeVisitingExamples {
public NodeVisitingExamples() {
this.visitor = new NodeVisitor(
new VisitHandler<>(Text.class, NodeVisitingExamples.this::visit)
);
}
public void traverse(String markdownText) {
Parser parser = Parser.builder().build();
this.visitor.visit(parser.parse(markdownText));
}
private void visit(Text text) {
System.out.println(text);
}
private final NodeVisitor visitor;
}
(Ajout si vous vous sentez comme ça)
Explication de la méthode de migration: https://github.com/vsch/flexmark-java/wiki/Pegdown-Migration
Officiel: https://github.com/vsch/flexmark-java/wiki/Usage
https://gist.github.com/dmikurube/630b82f437977501a415155e3df3d68c
Recommended Posts