@@ -6,64 +6,87 @@ module FormatHeuristic
9+import Data.ByteString.Lazy (ByteString)
9import Data.Char (toLower)
10import Data.Char (toLower)
12+import qualified Data.Map as M
13+import Data.Text (Text)
14+import qualified Data.Text.Lazy as TL
15+import qualified Data.Text.Lazy.Encoding as TL
16+import qualified OpenAPI.Checker.Report.Html.Template as Html
10import System.FilePath (takeExtension)
17import System.FilePath (takeExtension)
18+import Text.DocTemplates.Internal
11import Text.Pandoc
19import Text.Pandoc
13−formatFromFilePath :: PandocMonad m => FilePath -> Maybe (Writer m)
21+formatFromFilePath :: forall m. PandocMonad m => FilePath -> Maybe (Pandoc -> m ByteString)
14formatFromFilePath x =
22formatFromFilePath x =
15 case takeExtension (map toLower x) of
23 case takeExtension (map toLower x) of
16− ".adoc" -> f "asciidoc"
24+ ".adoc" -> f "asciidoc" def
17− ".asciidoc" -> f "asciidoc"
25+ ".asciidoc" -> f "asciidoc" def
18− ".context" -> f "context"
26+ ".context" -> f "context" def
19− ".ctx" -> f "context"
27+ ".ctx" -> f "context" def
20− ".db" -> f "docbook"
28+ ".db" -> f "docbook" def
21− ".doc" -> f "doc" -- so we get an "unknown reader" error
29+ ".doc" -> f "doc" def -- so we get an "unknown reader" error
22− ".docx" -> f "docx"
30+ ".docx" -> f "docx" def
23− ".dokuwiki" -> f "dokuwiki"
31+ ".dokuwiki" -> f "dokuwiki" def
24− ".epub" -> f "epub"
32+ ".epub" -> f "epub" def
25− ".fb2" -> f "fb2"
33+ ".fb2" -> f "fb2" def
26− ".htm" -> f "html"
34+ ".htm" -> html
27− ".html" -> f "html"
35+ ".html" -> html
28− ".icml" -> f "icml"
36+ ".icml" -> f "icml" def
29− ".json" -> f "json"
37+ ".json" -> f "json" def
30− ".latex" -> f "latex"
38+ ".latex" -> f "latex" def
31− ".lhs" -> f "markdown+lhs"
39+ ".lhs" -> f "markdown+lhs" def
32− ".ltx" -> f "latex"
40+ ".ltx" -> f "latex" def
33− ".markdown" -> f "markdown"
41+ ".markdown" -> markdown
34− ".mkdn" -> f "markdown"
42+ ".mkdn" -> markdown
35− ".mkd" -> f "markdown"
43+ ".mkd" -> markdown
36− ".mdwn" -> f "markdown"
44+ ".mdwn" -> markdown
37− ".mdown" -> f "markdown"
45+ ".mdown" -> markdown
38− ".Rmd" -> f "markdown"
46+ ".Rmd" -> markdown
39− ".md" -> f "markdown"
47+ ".md" -> markdown
40− ".ms" -> f "ms"
48+ ".ms" -> f "ms" def
41− ".muse" -> f "muse"
49+ ".muse" -> f "muse" def
42− ".native" -> f "native"
50+ ".native" -> f "native" def
43− ".odt" -> f "odt"
51+ ".odt" -> f "odt" def
44− ".opml" -> f "opml"
52+ ".opml" -> f "opml" def
45− ".org" -> f "org"
53+ ".org" -> f "org" def
46− ".pdf" -> f "pdf" -- so we get an "unknown reader" error
54+ -- so we get an "unknown reader" error
55+ ".pdf" -> f "pdf" def
47− ".pptx" -> f "pptx"
56+ ".pptx" -> f "pptx" def
48− ".roff" -> f "ms"
57+ ".roff" -> f "ms" def
49− ".rst" -> f "rst"
58+ ".rst" -> f "rst" def
50− ".rtf" -> f "rtf"
59+ ".rtf" -> f "rtf" def
51− ".s5" -> f "s5"
60+ ".s5" -> f "s5" def
52− ".t2t" -> f "t2t"
61+ ".t2t" -> f "t2t" def
53− ".tei" -> f "tei"
62+ ".tei" -> f "tei" def
54− ".tei.xml" -> f "tei"
63+ ".tei.xml" -> f "tei" def
55− ".tex" -> f "latex"
64+ ".tex" -> f "latex" def
56− ".texi" -> f "texinfo"
65+ ".texi" -> f "texinfo" def
57− ".texinfo" -> f "texinfo"
66+ ".texinfo" -> f "texinfo" def
58− ".text" -> f "markdown"
67+ ".text" -> markdown
59− ".textile" -> f "textile"
68+ ".textile" -> f "textile" def
60− ".txt" -> f "markdown"
69+ ".txt" -> markdown
61− ".wiki" -> f "mediawiki"
70+ ".wiki" -> f "mediawiki" def
62− ".xhtml" -> f "html"
71+ ".xhtml" -> f "html" def
63− ".ipynb" -> f "ipynb"
72+ ".ipynb" -> f "ipynb" def
64− ".csv" -> f "csv"
73+ ".csv" -> f "csv" def
65− ".bib" -> f "biblatex"
74+ ".bib" -> f "biblatex" def
66− ['.', y] | y `elem` ['1' .. '9'] -> f "man"
75+ ['.', y] | y `elem` ['1' .. '9'] -> f "man" def
67 _ -> Nothing
76 _ -> Nothing
78+ markdown, html :: Maybe (Pandoc -> m ByteString)
79+ markdown = f "markdown" markdownOpt
84+ { writerTemplate = Just Html.template
85+ , -- Not actually used. Needed to silence warning.
86+ writerVariables = Context $ M.fromList [("pagetitle", toVal ("OpenApi Diff" :: Text))]
88+ markdownOpt = def {writerExtensions = githubMarkdownExtensions}
69− f k = lookup k writers
90+ lookup k writers <&> \case
91+ TextWriter g -> fmap (TL.encodeUtf8 . TL.fromStrict) . g opt
92+ ByteStringWriter g -> g opt