43 lines
1.6 KiB
Haskell
43 lines
1.6 KiB
Haskell
-- SPDX-FileCopyrightText: 2022-2024 Gregor Kleen <gregor.kleen@ifi.lmu.de>, Steffen Jost <s.jost@fraport.de>
|
|
--
|
|
-- SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
module Utils.Pandoc where
|
|
|
|
|
|
import Import.NoModel
|
|
|
|
import Data.Either (fromRight)
|
|
-- import qualified Data.Char as Char
|
|
-- import qualified Data.Text as Text
|
|
-- import qualified Data.CaseInsensitive as CI
|
|
import Text.Blaze (toMarkup)
|
|
import Text.Blaze.Html.Renderer.Text (renderHtml)
|
|
import qualified Text.Pandoc as P
|
|
|
|
|
|
markdownToHtml :: Html -> Either P.PandocError Html
|
|
markdownToHtml html = P.runPure $ P.writeHtml5 htmlWriterOptions =<< P.readMarkdown markdownReaderOptions (toStrict $ renderHtml html)
|
|
|
|
plaintextToHtml :: Text -> Html
|
|
plaintextToHtml text = fromRight (toMarkup text) $ P.runPure $
|
|
P.writeHtml5 htmlWriterOptions =<< P.readMarkdown markdownReaderOptions text
|
|
-- Line below does not work as intended, also see Handler.Utils.Pandoc.plaintextToMarkdownWith which uses this code
|
|
-- where pandoc = P.Pandoc mempty [P.Plain [P.Str text]]
|
|
|
|
|
|
htmlReaderOptions, markdownReaderOptions :: P.ReaderOptions
|
|
htmlReaderOptions = markdownReaderOptions
|
|
markdownReaderOptions = def
|
|
{ P.readerExtensions = P.pandocExtensions
|
|
& P.enableExtension P.Ext_hard_line_breaks
|
|
& P.enableExtension P.Ext_autolink_bare_uris
|
|
, P.readerTabStop = 2
|
|
}
|
|
|
|
markdownWriterOptions, htmlWriterOptions :: P.WriterOptions
|
|
markdownWriterOptions = def
|
|
{ P.writerExtensions = P.readerExtensions markdownReaderOptions
|
|
, P.writerTabStop = P.readerTabStop markdownReaderOptions
|
|
}
|
|
htmlWriterOptions = markdownWriterOptions |