    {-# LANGUAGE FlexibleInstances   #-}
    {-# LANGUAGE GADTs               #-}
    {-# LANGUAGE OverloadedStrings   #-}
    {-# LANGUAGE ScopedTypeVariables #-}
    {-# LANGUAGE TupleSections       #-}
    {- |
       Module      : Text.Pandoc
       Copyright   : Copyright (C) 2006-2024 John MacFarlane
       License     : GNU GPL, version 2 or above

       Maintainer  : John MacFarlane <jgm@berkeley.edu>
       Stability   : alpha
       Portability : portable

    This helper module exports all writers functions.
    -}
    module Text.Pandoc.Writers
      (
        -- * Writers: converting /from/ Pandoc format
          Writer(..)
        , writers
        , writeANSI
        , writeAsciiDoc
        , writeAsciiDocLegacy
        , writeAsciiDoctor
        , writeBeamer
        , writeBibTeX
        , writeBibLaTeX
        , writeChunkedHTML
        , writeCommonMark
        , writeConTeXt
        , writeCslJson
        , writeDZSlides
        , writeDjot
        , writeDocBook4
        , writeDocBook5
        , writeDocx
        , writeDokuWiki
        , writeEPUB2
        , writeEPUB3
        , writeFB2
        , writeIpynb
        , writeHaddock
        , writeHtml4
        , writeHtml4String
        , writeHtml5
        , writeHtml5String
        , writeICML
        , writeJATS
        , writeJatsArchiving
        , writeJatsArticleAuthoring
        , writeJatsPublishing
        , writeJSON
        , writeJira
        , writeLaTeX
        , writeMan
        , writeMarkdown
        , writeMarkua
        , writeMediaWiki
        , writeMs
        , writeMuse
        , writeNative
        , writeODT
        , writeOPML
        , writeOpenDocument
        , writeOrg
        , writePlain
        , writePowerpoint
        , writeRST
        , writeRTF
        , writeRevealJs
        , writeS5
        , writeSlideous
        , writeSlidy
        , writeTEI
        , writeTexinfo
        , writeTextile
        , writeTypst
        , writeXML
        , writeXWiki
        , writeZimWiki
        , writeVimdoc
        , writeBBCode
        , writeBBCodeSteam
        , writeBBCodeFluxBB
        , writeBBCodePhpBB
        , writeBBCodeHubzilla
        , writeBBCodeXenforo
        , getWriter
        ) where

    import Control.Monad.Except (throwError)
    import Data.Aeson
    import qualified Data.ByteString.Lazy as BL
    import Data.Text (Text)
    import Text.Pandoc.Class
    import Text.Pandoc.Definition
    import qualified Text.Pandoc.Format as Format
    import Text.Pandoc.Options
    import qualified Text.Pandoc.UTF8 as UTF8
    import Text.Pandoc.Error
    import Text.Pandoc.Writers.ANSI
    import Text.Pandoc.Writers.AsciiDoc
    import Text.Pandoc.Writers.BibTeX
    import Text.Pandoc.Writers.ChunkedHTML
    import Text.Pandoc.Writers.CommonMark
    import Text.Pandoc.Writers.ConTeXt
    import Text.Pandoc.Writers.CslJson
    import Text.Pandoc.Writers.Djot
    import Text.Pandoc.Writers.DocBook
    import Text.Pandoc.Writers.Docx
    import Text.Pandoc.Writers.DokuWiki
    import Text.Pandoc.Writers.EPUB
    import Text.Pandoc.Writers.FB2
    import Text.Pandoc.Writers.Ipynb
    import Text.Pandoc.Writers.Haddock
    import Text.Pandoc.Writers.HTML
    import Text.Pandoc.Writers.ICML
    import Text.Pandoc.Writers.JATS
    import Text.Pandoc.Writers.Jira
    import Text.Pandoc.Writers.LaTeX
    import Text.Pandoc.Writers.Man
    import Text.Pandoc.Writers.Markdown
    import Text.Pandoc.Writers.MediaWiki
    import Text.Pandoc.Writers.Ms
    import Text.Pandoc.Writers.Muse
    import Text.Pandoc.Writers.Native
    import Text.Pandoc.Writers.ODT
    import Text.Pandoc.Writers.OpenDocument
    import Text.Pandoc.Writers.OPML
    import Text.Pandoc.Writers.Org
    import Text.Pandoc.Writers.Powerpoint
    import Text.Pandoc.Writers.RST
    import Text.Pandoc.Writers.RTF
    import Text.Pandoc.Writers.TEI
    import Text.Pandoc.Writers.Texinfo
    import Text.Pandoc.Writers.Textile
    import Text.Pandoc.Writers.Typst
    import Text.Pandoc.Writers.XML
    import Text.Pandoc.Writers.XWiki
    import Text.Pandoc.Writers.ZimWiki
    import Text.Pandoc.Writers.Vimdoc
    import Text.Pandoc.Writers.BBCode (
      writeBBCode,
      writeBBCodeFluxBB,
      writeBBCodeHubzilla,
      writeBBCodePhpBB,
      writeBBCodeSteam,
      writeBBCodeXenforo,
     )

    data Writer m = TextWriter (WriterOptions -> Pandoc -> m Text)
                  | ByteStringWriter (WriterOptions -> Pandoc -> m BL.ByteString)

    -- | Association list of formats and writers.
    writers :: PandocMonad m => [ (Text, Writer m) ]
    writers :: forall (m :: * -> *). PandocMonad m => [(Text, Writer m)]
    writers = [
       (Text
    "native"       , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeNative)
      ,(Text
    "json"         , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeJSON)
      ,(Text
    "docx"         , (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    ByteStringWriter WriterOptions -> Pandoc -> m ByteString
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m ByteString
    writeDocx)
      ,(Text
    "odt"          , (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    ByteStringWriter WriterOptions -> Pandoc -> m ByteString
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m ByteString
    writeODT)
      ,(Text
    "pptx"         , (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    ByteStringWriter WriterOptions -> Pandoc -> m ByteString
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m ByteString
    writePowerpoint)
      ,(Text
    "epub"         , (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    ByteStringWriter WriterOptions -> Pandoc -> m ByteString
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m ByteString
    writeEPUB3)
      ,(Text
    "epub2"        , (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    ByteStringWriter WriterOptions -> Pandoc -> m ByteString
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m ByteString
    writeEPUB2)
      ,(Text
    "epub3"        , (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    ByteStringWriter WriterOptions -> Pandoc -> m ByteString
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m ByteString
    writeEPUB3)
      ,(Text
    "fb2"          , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeFB2)
      ,(Text
    "ipynb"        , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeIpynb)
      ,(Text
    "html"         , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeHtml5String)
      ,(Text
    "html4"        , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeHtml4String)
      ,(Text
    "html5"        , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeHtml5String)
      ,(Text
    "icml"         , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeICML)
      ,(Text
    "s5"           , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeS5)
      ,(Text
    "slidy"        , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeSlidy)
      ,(Text
    "slideous"     , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeSlideous)
      ,(Text
    "dzslides"     , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeDZSlides)
      ,(Text
    "revealjs"     , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeRevealJs)
      ,(Text
    "docbook"      , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeDocBook5)
      ,(Text
    "docbook4"     , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeDocBook4)
      ,(Text
    "docbook5"     , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeDocBook5)
      ,(Text
    "jats"         , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeJatsArchiving)
      ,(Text
    "jats_articleauthoring", (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeJatsArticleAuthoring)
      ,(Text
    "jats_publishing" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeJatsPublishing)
      ,(Text
    "jats_archiving" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeJatsArchiving)
      ,(Text
    "jira"         , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeJira)
      ,(Text
    "opml"         , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeOPML)
      ,(Text
    "opendocument" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeOpenDocument)
      ,(Text
    "latex"        , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeLaTeX)
      ,(Text
    "beamer"       , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeBeamer)
      ,(Text
    "context"      , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeConTeXt)
      ,(Text
    "texinfo"      , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeTexinfo)
      ,(Text
    "man"          , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMan)
      ,(Text
    "ms"           , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMs)
      ,(Text
    "markdown"     , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMarkdown)
      ,(Text
    "markdown_strict" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMarkdown)
      ,(Text
    "markdown_phpextra" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMarkdown)
      ,(Text
    "markdown_github" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMarkdown)
      ,(Text
    "markdown_mmd" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMarkdown)
      ,(Text
    "plain"        , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writePlain)
      ,(Text
    "rst"          , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeRST)
      ,(Text
    "mediawiki"    , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMediaWiki)
      ,(Text
    "dokuwiki"     , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeDokuWiki)
      ,(Text
    "xwiki"        , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeXWiki)
      ,(Text
    "zimwiki"      , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeZimWiki)
      ,(Text
    "textile"      , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeTextile)
      ,(Text
    "typst"        , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeTypst)
      ,(Text
    "rtf"          , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeRTF)
      ,(Text
    "org"          , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeOrg)
      ,(Text
    "asciidoc"     , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeAsciiDoc)
      ,(Text
    "asciidoctor"  , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeAsciiDoc)
      ,(Text
    "asciidoc_legacy" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeAsciiDocLegacy)
      ,(Text
    "haddock"      , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeHaddock)
      ,(Text
    "commonmark"   , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeCommonMark)
      ,(Text
    "commonmark_x" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeCommonMark)
      ,(Text
    "gfm"          , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeCommonMark)
      ,(Text
    "tei"          , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeTEI)
      ,(Text
    "muse"         , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMuse)
      ,(Text
    "csljson"      , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeCslJson)
      ,(Text
    "bibtex"       , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeBibTeX)
      ,(Text
    "biblatex"     , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeBibLaTeX)
      ,(Text
    "markua"       , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeMarkua)
      ,(Text
    "chunkedhtml"  , (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m ByteString) -> Writer m
    ByteStringWriter WriterOptions -> Pandoc -> m ByteString
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m ByteString
    writeChunkedHTML)
      ,(Text
    "djot"         , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeDjot)
      ,(Text
    "ansi"         , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeANSI)
      ,(Text
    "xml"          , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeXML)
      ,(Text
    "vimdoc"       , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeVimdoc)
      ,(Text
    "bbcode"       , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeBBCode)
      ,(Text
    "bbcode_steam" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeBBCodeSteam)
      ,(Text
    "bbcode_phpbb" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeBBCodePhpBB)
      ,(Text
    "bbcode_fluxbb", (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeBBCodeFluxBB)
      ,(Text
    "bbcode_hubzilla" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeBBCodeHubzilla)
      ,(Text
    "bbcode_xenforo" , (WriterOptions -> Pandoc -> m Text) -> Writer m
    forall (m :: * -> *).
    (WriterOptions -> Pandoc -> m Text) -> Writer m
    TextWriter WriterOptions -> Pandoc -> m Text
    forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeBBCodeXenforo)
      ]

    -- | Retrieve writer, extensions based on formatSpec (format+extensions).
    getWriter :: PandocMonad m => Format.FlavoredFormat -> m (Writer m, Extensions)
    getWriter :: forall (m :: * -> *).
    PandocMonad m =>
    FlavoredFormat -> m (Writer m, Extensions)
    getWriter FlavoredFormat
    flvrd = do
      let writerName :: Text
    writerName = FlavoredFormat -> Text
    Format.formatName FlavoredFormat
    flvrd
      case Text -> [(Text, Writer m)] -> Maybe (Writer m)
    forall a b. Eq a => a -> [(a, b)] -> Maybe b
    lookup Text
    writerName [(Text, Writer m)]
    forall (m :: * -> *). PandocMonad m => [(Text, Writer m)]
    writers of
        Maybe (Writer m)
    Nothing  -> PandocError -> m (Writer m, Extensions)
    forall a. PandocError -> m a
    forall e (m :: * -> *) a. MonadError e m => e -> m a
    throwError (PandocError -> m (Writer m, Extensions))
    -> PandocError -> m (Writer m, Extensions)
    forall a b. (a -> b) -> a -> b
    $ Text -> PandocError
    PandocUnknownWriterError Text
    writerName
        Just  Writer m
    w  -> (Writer m
    w,) (Extensions -> (Writer m, Extensions))
    -> m Extensions -> m (Writer m, Extensions)
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    <$>
          ExtensionsConfig -> FlavoredFormat -> m Extensions
    forall (m :: * -> *).
    PandocMonad m =>
    ExtensionsConfig -> FlavoredFormat -> m Extensions
    Format.applyExtensionsDiff (Text -> ExtensionsConfig
    Format.getExtensionsConfig Text
    writerName) FlavoredFormat
    flvrd

    writeJSON :: PandocMonad m => WriterOptions -> Pandoc -> m Text
    writeJSON :: forall (m :: * -> *).
    PandocMonad m =>
    WriterOptions -> Pandoc -> m Text
    writeJSON WriterOptions
    _ = Text -> m Text
    forall a. a -> m a
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Text -> m Text) -> (Pandoc -> Text) -> Pandoc -> m Text
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ByteString -> Text
    UTF8.toText (ByteString -> Text) -> (Pandoc -> ByteString) -> Pandoc -> Text
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . ByteString -> ByteString
    BL.toStrict (ByteString -> ByteString)
    -> (Pandoc -> ByteString) -> Pandoc -> ByteString
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . Pandoc -> ByteString
    forall a. ToJSON a => a -> ByteString
    encode