Skip to content

Commit

Permalink
Add support for HTML fragments #57
Browse files Browse the repository at this point in the history
  • Loading branch information
jelovirt committed Sep 28, 2017
1 parent 31f41ba commit 442bfc1
Show file tree
Hide file tree
Showing 9 changed files with 474 additions and 3 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ repositories {
dependencies {
compile group: "org.dita-ot", name: "dost", version: "[2.1,)"
compile group: "com.vladsch.flexmark", name: "flexmark-all", version: "0.26.4"
compile group: 'nu.validator.htmlparser', name: 'htmlparser', version: '1.4'
testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3'
testCompile group: 'xmlunit', name: 'xmlunit', version: '1.6'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public ParseException(final String msg) {
super(cause);
}

ParseException(String msg, ParseException cause) {
public ParseException(String msg, Throwable cause) {
super(msg, cause);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package com.elovirta.dita.markdown.renderer;

import com.elovirta.dita.markdown.*;
import com.elovirta.dita.markdown.utils.FragmentContentHandler;
import com.vladsch.flexmark.ast.*;
import com.vladsch.flexmark.ext.abbreviation.Abbreviation;
import com.vladsch.flexmark.ext.anchorlink.AnchorLink;
Expand All @@ -17,11 +18,24 @@
import com.vladsch.flexmark.ext.yaml.front.matter.YamlFrontMatterBlock;
import com.vladsch.flexmark.util.options.DataHolder;
import com.vladsch.flexmark.util.sequence.BasedSequence;
import nu.validator.htmlparser.sax.HtmlParser;
import org.apache.commons.io.FilenameUtils;
import org.dita.dost.util.DitaClass;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;

import javax.xml.transform.Templates;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamSource;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.net.URI;
import java.util.*;
import java.util.regex.Matcher;
Expand Down Expand Up @@ -82,7 +96,10 @@ public class CoreNodeRenderer extends SaxSerializer implements NodeRenderer {
sections.put(TOPIC_EXAMPLE.localName, TOPIC_EXAMPLE);
}

// private final Map<String, Object> documentMetadata;
private final SAXTransformerFactory tf;
private final Templates t;

// private final Map<String, Object> documentMetadata;
private final Map<String, ReferenceNode> references = new HashMap<>();
private final Map<String, String> abbreviations = new HashMap<>();
private final MetadataSerializerImpl metadataSerializer;
Expand Down Expand Up @@ -116,6 +133,13 @@ public CoreNodeRenderer(DataHolder options) {
// myNextLine = 0;
// nextLineStartOffset = 0;
metadataSerializer = new MetadataSerializerImpl(idFromYaml);

try (InputStream in = getClass().getResourceAsStream("/hdita2dita.xsl")) {
tf = (SAXTransformerFactory) TransformerFactory.newInstance();
t = tf.newTemplates(new StreamSource(in));
} catch (IOException | TransformerConfigurationException e) {
throw new RuntimeException(e);
}
}

// CoreNodeRenderer(final ContentHandler contentHandler, final Map<String, Object> documentMetadata) {
Expand Down Expand Up @@ -684,7 +708,22 @@ private static String getId(final String contents) {

private void render(final HtmlBlock node, final NodeRendererContext context, final DitaWriter html) {
final String text = node.getChars().toString();
html.characters(text);
final FragmentContentHandler fragmentFilter = new FragmentContentHandler();
fragmentFilter.setContentHandler(html.contentHandler);
final TransformerHandler h;
try {
h = tf.newTransformerHandler(t);
} catch (final TransformerConfigurationException e) {
throw new RuntimeException(e);
}
h.setResult(new SAXResult(fragmentFilter));
final HtmlParser parser = new HtmlParser();
parser.setContentHandler(h);
try {
parser.parse(new InputSource(new StringReader(text)));
} catch (IOException|SAXException e) {
throw new ParseException("Failed to parse HTML: " + e.getMessage(), e);
}
}

private void render(final HtmlInline node, final NodeRendererContext context, final DitaWriter html) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.elovirta.dita.markdown.utils;

import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLFilterImpl;

public class FragmentContentHandler extends XMLFilterImpl {

// /**
// * Construct an XML filter with the specified parent.
// */
// public FragmentContentHandler(XMLReader parent) {
// super(parent);
// }

/**
* Ignore start document event
*/
public void startDocument() throws SAXException {
// ignore
}

/**
* Ignore end document event.
*/
public void endDocument() throws SAXException {
// ignore
}

}
Loading

0 comments on commit 442bfc1

Please sign in to comment.