Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

Render tables.

Authordjarvis <email>
Date2016-11-18 00:01:33 GMT-0800
Commit03ebaa0a05426aa2ac23f2081f877a29e3998b0b
Parent2ea3163
Delta38 lines added, 10 lines removed, 28-line increase
src/main/java/com/scrivendor/preview/MarkdownPreviewPane.java
import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
import javafx.application.Platform;
import javafx.beans.property.DoubleProperty;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
-import org.commonmark.node.Node;
+import org.commonmark.Extension;
+import org.commonmark.ext.gfm.tables.TablesExtension;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;
private boolean delayScroll;
private String html;
+
+ private List<Extension> extensions;
public MarkdownPreviewPane() {
@Override
- public void changed(
- final ObservableValue<? extends String> observable,
- final String oldValue,
- final String newValue ) {
- final String markdown = newValue == null ? "" : newValue;
- final HtmlRenderer renderer = HtmlRenderer.builder().build();
- final Parser parser = Parser.builder().build();
- final Node document = parser.parse( markdown );
+ public void changed( final ObservableValue<? extends String> observable,
+ final String oValue, final String nValue ) {
+ final String markdown = nValue == null ? "" : nValue;
- setHtml( renderer.render( document ) );
+ setHtml( toHtml( markdown ) );
update();
+ }
+
+ /**
+ * Converts a string of markdown into HTML.
+ *
+ * @param markdown The markdown text to convert to HTML, must not be null.
+ *
+ * @return
+ */
+ private String toHtml( final String markdown ) {
+ return createRenderer().render( createParser().parse( markdown ) );
+ }
+
+ private List<Extension> getExtensions() {
+ if( this.extensions == null ) {
+ this.extensions = new ArrayList<>();
+ extensions.add( TablesExtension.create() );
+ }
+
+ return this.extensions;
+ }
+
+ private Parser createParser() {
+ return Parser.builder().extensions( getExtensions() ).build();
+ }
+
+ private HtmlRenderer createRenderer() {
+ return HtmlRenderer.builder().extensions( getExtensions() ).build();
}