#!/bin/sh
# Functional check of the installed flexmark-java: parse a Markdown
# document with every packaged extension and check the HTML, and convert
# it to JIRA markup. Only the jars in /usr/share/java are on the class path.
set -e

WORK="${AUTOPKGTEST_TMP:-$(mktemp -d)}"
cd "$WORK"
CP=$(ls /usr/share/java/flexmark*.jar | command grep -v -- '-[0-9][0-9.]*\.jar$' | tr '\n' ':')
CP="$CP/usr/share/java/autolink.jar:/usr/share/java/org.jetbrains.annotations-java8.jar"

cat > Render.java <<'X'
import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension;
import com.vladsch.flexmark.ext.autolink.AutolinkExtension;
import com.vladsch.flexmark.ext.emoji.EmojiExtension;
import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension;
import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension;
import com.vladsch.flexmark.ext.ins.InsExtension;
import com.vladsch.flexmark.ext.superscript.SuperscriptExtension;
import com.vladsch.flexmark.ext.tables.TablesExtension;
import com.vladsch.flexmark.ext.wikilink.WikiLinkExtension;
import com.vladsch.flexmark.ext.yaml.front.matter.AbstractYamlFrontMatterVisitor;
import com.vladsch.flexmark.ext.yaml.front.matter.YamlFrontMatterExtension;
import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.jira.converter.JiraConverterExtension;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.util.ast.Node;
import com.vladsch.flexmark.util.data.MutableDataSet;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;

public class Render {
    public static void main(String[] args) throws Exception {
        MutableDataSet options = new MutableDataSet();
        options.set(Parser.EXTENSIONS, Arrays.asList(
            AnchorLinkExtension.create(), AutolinkExtension.create(),
            EmojiExtension.create(), StrikethroughExtension.create(),
            TaskListExtension.create(), InsExtension.create(),
            SuperscriptExtension.create(), TablesExtension.create(),
            WikiLinkExtension.create(), YamlFrontMatterExtension.create()));
        String md = new String(Files.readAllBytes(Paths.get(args[0])), "UTF-8");
        Parser parser = Parser.builder(options).build();
        Node doc = parser.parse(md);
        AbstractYamlFrontMatterVisitor fm = new AbstractYamlFrontMatterVisitor();
        fm.visit(doc);
        System.out.println("front-matter title: " + fm.getData().get("title"));
        System.out.print(HtmlRenderer.builder(options).build().render(doc));

        MutableDataSet jira = new MutableDataSet();
        jira.set(Parser.EXTENSIONS, Arrays.asList(JiraConverterExtension.create()));
        System.out.print(HtmlRenderer.builder(jira).build().render(Parser.builder(jira).build().parse("# Head\n\n**bold**\n")));
    }
}
X

cat > in.md <<'X'
---
title: Demo
---

# Heading One

Text with ~~strike~~, ++ins++, x^2^, :smile: and https://www.debian.org/ link.

- [ ] open task
- [x] done task

| a | b |
|---|---|
| 1 | 2 |

See [[Wiki Page]].
X

javac -cp "$CP" -d . Render.java
java -cp ".:$CP" Render in.md > out.html
cat out.html
check() { command grep -qF -- "$1" out.html || { echo "missing: $1"; exit 1; }; }
check 'front-matter title: [Demo]'
check '<h1><a href="#heading-one" id="heading-one">Heading One</a></h1>'
check '<del>strike</del>'
check '<ins>ins</ins>'
check '<sup>2</sup>'
check 'alt="emoji github:smile"'
check '<a href="https://www.debian.org/">https://www.debian.org/</a>'
check 'type="checkbox"'
check '<table>'
check '<a href="Wiki-Page">Wiki Page</a>'
check 'h1. Head'
check '*bold*'
echo "render: PASS"
