Tweak Markdown mit Java Flexmark-Java

Wenn es um Markdown-Prozessoren geht, gibt es meiner Meinung nach relativ bekannte Bibliotheken in Perl (Kopffamilie) / Python / Ruby / JavaScript usw., aber wenn es um Java geht, habe ich nicht so viel gehört (oder eher Standard). Ich habe nichts) Ich fühle.

Aktueller Status (02.03.2017) Mit Blick auf den Java Markdown-Prozessor in Open Source ist er noch in der aktiven Entwicklung und scheint in Bezug auf Funktionalität und Geschwindigkeit zufriedenstellend zu sein flexmark-java Ich habe es ein wenig berührt, daher ist es eine leichte Einführung.

Übersicht über die Java Markdown-Bibliothek

flexmark-java facts

Markdown Melancholie und Flexmark-Java-Erweiterung

Markdown ist bekannt dafür, dass es viele Dialekte gibt, wie oben erwähnt, aber es ist fast dasselbe, und ich möchte es, wenn möglich, mit einer einzigen Implementierung behandeln. Flexmark-Java deckt also viele Dialekte ab, indem es erweitert wird (Plug-In-Typ?).

// https://github.com/vsch/flexmark-java/wiki/Geändertes Verwendungsbeispiel

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 {

    //Legen Sie Optionen für jeden Markdown-Dialekt fest
    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;
    }

    //Generieren Sie Parser für jeden Dialekt
    private Parser getParser(String type) {
        switch (type) {
            case "commonmark":
                return Parser.builder().build();
            default:
                return Parser.builder(getOptions(type)).build();
        }
    }

    //Generieren Sie einen Renderer für jeden Dialekt
    private HtmlRenderer getHtmlRenderer(String type) {
        switch (type) {
            case "commonmark":
                return HtmlRenderer.builder().build();
            default:
                return HtmlRenderer.builder(getOptions(type)).build();
        }
    }

    //HTML rendern!
    public String render(String markdownText, String type) {
        Node document = getParser(type).parse(markdownText);
        return getHtmlRenderer(type).render(document);
    }
}

Ich möchte selbst mit Markdown herumspielen

Es scheint, dass es auch eine Möglichkeit für die Brüder gibt, alleine mit dem analysierten Knoten zu spielen.

// https://github.com/vsch/flexmark-java/wiki/Geändertes Verwendungsbeispiel

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

Ich möchte selbst eine Erweiterung schreiben

(Ergänzung, wenn Sie sich so fühlen)

Ich habe meinen Pegdown benutzt!

Erläuterung der Migrationsmethode: https://github.com/vsch/flexmark-java/wiki/Pegdown-Migration

Mehr Details

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

Beispielcode

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

Recommended Posts

Tweak Markdown mit Java Flexmark-Java
Java zum Spielen mit Function
Morphologische Analyse in Java mit Kuromoji
Konvertieren Sie Markdown mit flexmark-java in HTML
Parallelitätsmethode in Java mit grundlegendem Beispiel
Spielen Sie die Framework 2.6 (Java) -Umgebungskonstruktion mit Eclipse
Spielen Sie RAW-, WAV- und MP3-Dateien in Java ab
Lesen Sie die xlsx-Datei in Java mit Selenium
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Behandeln Sie große JSON mit Java Lambda
Partisierung in Java
Änderungen in Java 11
Janken in Java
Umfangsrate in Java
FizzBuzz in Java
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Überarbeitetes GUI-Tool, das 2016 mit Java8 + JavaFX erstellt wurde
Führen Sie eine statische Code-Analyse mit Checkstyle mit Java + Gradle durch
Textextraktion in Java aus PDF mit pdfbox-2.0.8
Üben Sie die Arbeit mit Unicode-Ersatzpaaren in Java
[JAVA] [Spring] [MyBatis] Verwenden Sie IN () mit SQL Builder
Verschlüsseln / Entschlüsseln mit AES256 in PHP und Java
Behandeln Sie JSON domänenübergreifend mit Play Framework
Programmierung mit dem direkten Summentyp in Java (Nachrichten)
Kommen Sie mit Java-Containern in Cloud Run zurecht
Installieren Sie Java mit Homebrew
Lesen Sie JSON in Java
Interpreter-Implementierung durch Java
Spielen Sie Framework2.5 (Java) -Tipps
Aufrufen von Funktionen in großen Mengen mit Java Reflection
Janken App in Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Wechseln Sie die Plätze mit Java
Kommentare in der Java-Quelle
Fügen Sie das Bild mit der statischen Java-Methode in die JAR-Datei ein
Bequemer Download mit JAVA
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Boyer-Moore-Implementierung in Java
Spielen Sie mit Java-Funktionsknoten, die Java mit Node-RED verwenden können
Hallo Welt in Java
Schalten Sie Java mit direnv
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Adressiert, da Azure-Funktionen in Java nicht mehr funktionieren
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
ASCII-Kunst in Java
Listen in Java vergleichen
Ausgabe true mit if (a == 1 && a == 2 && a == 3) in Java (Invisible Identifier)