Tweak Markdown avec Java flexmark-java

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.

Présentation de la bibliothèque Java Markdown

flexmark-java facts

Markdown Melancholy et extension flexmark-java

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);
    }
}

Je veux jouer avec Markdown moi-même

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;
}

Je veux écrire une extension moi-même

(Ajout si vous vous sentez comme ça)

J'ai utilisé mon pegdown!

Explication de la méthode de migration: https://github.com/vsch/flexmark-java/wiki/Pegdown-Migration

Plus de détails

Officiel: https://github.com/vsch/flexmark-java/wiki/Usage

Exemple de code

https://gist.github.com/dmikurube/630b82f437977501a415155e3df3d68c

Recommended Posts

Tweak Markdown avec Java flexmark-java
Java pour jouer avec Function
Analyse morphologique en Java avec Kuromoji
Convertissez Markdown en HTML avec flexmark-java
Méthode de concurrence en Java avec exemple de base
Construction de l'environnement Play Framework 2.6 (Java) avec Eclipse
Lecture de fichiers RAW, WAV, MP3 en Java
Lire le fichier xlsx en Java avec Selenium
Diviser une chaîne avec ". (Dot)" en Java
Gérez d'énormes JSON avec Java Lambda
Partition en Java
Changements dans Java 11
Janken à Java
Taux circonférentiel à Java
FizzBuzz en Java
Lire une chaîne dans un fichier PDF avec Java
Créer un CSR avec des informations étendues en Java
Outil GUI refactorisé réalisé avec Java8 + JavaFX en 2016
Analyse de code statique par Checkstyle avec Java + Gradle
Extraction de texte en Java à partir de PDF avec pdfbox-2.0.8
Entraînez-vous à travailler avec des paires de substitution Unicode en Java
[JAVA] [Spring] [MyBatis] Utiliser IN () avec SQL Builder
Crypter / décrypter avec AES256 en PHP et Java
Gérez le cross-domain JSON avec Play Framework
Programmation utilisant le type de somme directe en Java (news)
S'entendre avec les conteneurs Java dans Cloud Run
Installez java avec Homebrew
Lire JSON en Java
Implémentation de l'interpréteur par Java
Conseils pour Play Framework2.5 (Java)
Comment appeler des fonctions en bloc avec la réflexion Java
Application Janken en Java
Programmation par contraintes en Java
Mettez java8 dans centos7
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Changer de siège avec Java
Commentaires dans la source Java
Inclure l'image dans le fichier jar avec la méthode statique java
Téléchargement confortable avec JAVA
Formater XML en Java
Simple htmlspecialchars en Java
Implémentation Boyer-Moore en Java
Jouez avec les nœuds de fonction Java qui peuvent utiliser Java avec Node-RED
Hello World en Java
Changer java avec direnv
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Résolution du problème lorsque Azure Functions a cessé de fonctionner en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
Sortie true avec if (a == 1 && a == 2 && a == 3) en Java (identifiant invisible)