mirror of
https://github.com/ilyakooo0/compaREST.git
synced 2024-11-27 11:14:40 +03:00
96 lines
3.5 KiB
Haskell
96 lines
3.5 KiB
Haskell
-- |
|
|
-- Originally based on:
|
|
-- https://github.com/jgm/pandoc/blob/master/src/Text/Pandoc/App/FormatHeuristics.hs
|
|
module FormatHeuristic
|
|
( formatFromFilePath
|
|
)
|
|
where
|
|
|
|
import Data.ByteString.Lazy (ByteString)
|
|
import Data.Char (toLower)
|
|
import Data.Functor
|
|
import qualified Data.Map as M
|
|
import Data.Text (Text)
|
|
import qualified Data.Text.Lazy as TL
|
|
import qualified Data.Text.Lazy.Encoding as TL
|
|
import qualified OpenAPI.Checker.Report.Html.Template as Html
|
|
import System.FilePath (takeExtension)
|
|
import Text.DocTemplates.Internal
|
|
import Text.Pandoc
|
|
|
|
formatFromFilePath :: forall m. PandocMonad m => FilePath -> Maybe (Pandoc -> m ByteString, FilePath)
|
|
formatFromFilePath x =
|
|
case takeExtension (map toLower x) of
|
|
".adoc" -> fWithDefaultFile "asciidoc" def
|
|
".asciidoc" -> fWithDefaultFile "asciidoc" def
|
|
".context" -> fWithDefaultFile "context" def
|
|
".ctx" -> fWithDefaultFile "context" def
|
|
".db" -> fWithDefaultFile "docbook" def
|
|
".doc" -> fWithDefaultFile "doc" def -- so we get an "unknown reader" error
|
|
".docx" -> fWithDefaultFile "docx" def
|
|
".dokuwiki" -> fWithDefaultFile "dokuwiki" def
|
|
".epub" -> fWithDefaultFile "epub" def
|
|
".fb2" -> fWithDefaultFile "fb2" def
|
|
".htm" -> fWithDefaultFile "html" def
|
|
".html" -> fWithDefaultFile "html" def
|
|
".icml" -> fWithDefaultFile "icml" def
|
|
".json" -> fWithDefaultFile "json" def
|
|
".latex" -> fWithDefaultFile "latex" def
|
|
".lhs" -> fWithDefaultFile "markdown+lhs" def
|
|
".ltx" -> fWithDefaultFile "latex" def
|
|
".markdown" -> markdown
|
|
".mkdn" -> markdown
|
|
".mkd" -> markdown
|
|
".mdwn" -> markdown
|
|
".mdown" -> markdown
|
|
".Rmd" -> markdown
|
|
".md" -> markdown
|
|
".ms" -> fWithDefaultFile "ms" def
|
|
".muse" -> fWithDefaultFile "muse" def
|
|
".native" -> fWithDefaultFile "native" def
|
|
".odt" -> fWithDefaultFile "odt" def
|
|
".opml" -> fWithDefaultFile "opml" def
|
|
".org" -> fWithDefaultFile "org" def
|
|
-- so we get an "unknown reader" error
|
|
".pdf" -> fWithDefaultFile "pdf" def
|
|
".pptx" -> fWithDefaultFile "pptx" def
|
|
".roff" -> fWithDefaultFile "ms" def
|
|
".rst" -> fWithDefaultFile "rst" def
|
|
".rtf" -> fWithDefaultFile "rtf" def
|
|
".s5" -> fWithDefaultFile "s5" def
|
|
".t2t" -> fWithDefaultFile "t2t" def
|
|
".tei" -> fWithDefaultFile "tei" def
|
|
".tei.xml" -> fWithDefaultFile "tei" def
|
|
".tex" -> fWithDefaultFile "latex" def
|
|
".texi" -> fWithDefaultFile "texinfo" def
|
|
".texinfo" -> fWithDefaultFile "texinfo" def
|
|
".text" -> markdown
|
|
".textile" -> fWithDefaultFile "textile" def
|
|
".txt" -> markdown
|
|
".wiki" -> fWithDefaultFile "mediawiki" def
|
|
".xhtml" -> fWithDefaultFile "html" def
|
|
".ipynb" -> fWithDefaultFile "ipynb" def
|
|
".csv" -> fWithDefaultFile "csv" def
|
|
".bib" -> fWithDefaultFile "biblatex" def
|
|
['.', y] | y `elem` ['1' .. '9'] -> fWithDefaultFile "man" def
|
|
"" ->
|
|
(,x <> ".html")
|
|
<$> f
|
|
"html"
|
|
def
|
|
{ writerTemplate = Just Html.template
|
|
, -- Not actually used. Needed to silence warning.
|
|
writerVariables = Context $ M.fromList [("pagetitle", toVal ("OpenApi Diff" :: Text))]
|
|
}
|
|
_ -> Nothing
|
|
where
|
|
markdown :: Maybe (Pandoc -> m ByteString, FilePath)
|
|
markdown = fWithDefaultFile "markdown" markdownOpt
|
|
|
|
markdownOpt = def {writerExtensions = githubMarkdownExtensions}
|
|
fWithDefaultFile k opt = (,x) <$> f k opt
|
|
f k opt =
|
|
lookup k writers <&> \case
|
|
TextWriter g -> fmap (TL.encodeUtf8 . TL.fromStrict) . g opt
|
|
ByteStringWriter g -> g opt
|