Blame src/Text/Pandoc/Writers.hs

Packit Service d2f85f
{-
Packit Service d2f85f
Copyright (C) 2006-2017 John MacFarlane <jgm@berkeley.edu>
Packit Service d2f85f
Packit Service d2f85f
This program is free software; you can redistribute it and/or modify
Packit Service d2f85f
it under the terms of the GNU General Public License as published by
Packit Service d2f85f
the Free Software Foundation; either version 2 of the License, or
Packit Service d2f85f
(at your option) any later version.
Packit Service d2f85f
Packit Service d2f85f
This program is distributed in the hope that it will be useful,
Packit Service d2f85f
but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service d2f85f
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service d2f85f
GNU General Public License for more details.
Packit Service d2f85f
Packit Service d2f85f
You should have received a copy of the GNU General Public License
Packit Service d2f85f
along with this program; if not, write to the Free Software
Packit Service d2f85f
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit Service d2f85f
-}
Packit Service d2f85f
{-# LANGUAGE FlexibleInstances   #-}
Packit Service d2f85f
{-# LANGUAGE GADTs               #-}
Packit Service d2f85f
{-# LANGUAGE ScopedTypeVariables #-}
Packit Service d2f85f
Packit Service d2f85f
{- |
Packit Service d2f85f
   Module      : Text.Pandoc
Packit Service d2f85f
   Copyright   : Copyright (C) 2006-2017 John MacFarlane
Packit Service d2f85f
   License     : GNU GPL, version 2 or above
Packit Service d2f85f
Packit Service d2f85f
   Maintainer  : John MacFarlane <jgm@berkeley.edu>
Packit Service d2f85f
   Stability   : alpha
Packit Service d2f85f
   Portability : portable
Packit Service d2f85f
Packit Service d2f85f
This helper module exports all writers functions.
Packit Service d2f85f
-}
Packit Service d2f85f
module Text.Pandoc.Writers
Packit Service d2f85f
  (
Packit Service d2f85f
    -- * Writers: converting /from/ Pandoc format
Packit Service d2f85f
      Writer(..)
Packit Service d2f85f
    , writers
Packit Service d2f85f
    , writeAsciiDoc
Packit Service d2f85f
    , writeBeamer
Packit Service d2f85f
    , writeCommonMark
Packit Service d2f85f
    , writeConTeXt
Packit Service d2f85f
    , writeCustom
Packit Service d2f85f
    , writeDZSlides
Packit Service d2f85f
    , writeDocbook4
Packit Service d2f85f
    , writeDocbook5
Packit Service d2f85f
    , writeDocx
Packit Service d2f85f
    , writeDokuWiki
Packit Service d2f85f
    , writeEPUB2
Packit Service d2f85f
    , writeEPUB3
Packit Service d2f85f
    , writeFB2
Packit Service d2f85f
    , writeHaddock
Packit Service d2f85f
    , writeHtml4
Packit Service d2f85f
    , writeHtml4String
Packit Service d2f85f
    , writeHtml5
Packit Service d2f85f
    , writeHtml5String
Packit Service d2f85f
    , writeICML
Packit Service d2f85f
    , writeJATS
Packit Service d2f85f
    , writeJSON
Packit Service d2f85f
    , writeLaTeX
Packit Service d2f85f
    , writeMan
Packit Service d2f85f
    , writeMarkdown
Packit Service d2f85f
    , writeMediaWiki
Packit Service d2f85f
    , writeMs
Packit Service d2f85f
    , writeMuse
Packit Service d2f85f
    , writeNative
Packit Service d2f85f
    , writeODT
Packit Service d2f85f
    , writeOPML
Packit Service d2f85f
    , writeOpenDocument
Packit Service d2f85f
    , writeOrg
Packit Service d2f85f
    , writePlain
Packit Service d2f85f
    , writePowerpoint
Packit Service d2f85f
    , writeRST
Packit Service d2f85f
    , writeRTF
Packit Service d2f85f
    , writeRevealJs
Packit Service d2f85f
    , writeS5
Packit Service d2f85f
    , writeSlideous
Packit Service d2f85f
    , writeSlidy
Packit Service d2f85f
    , writeTEI
Packit Service d2f85f
    , writeTexinfo
Packit Service d2f85f
    , writeTextile
Packit Service d2f85f
    , writeZimWiki
Packit Service d2f85f
    , getWriter
Packit Service d2f85f
    ) where
Packit Service d2f85f
Packit Service d2f85f
import Data.Aeson
Packit Service d2f85f
import qualified Data.ByteString.Lazy as BL
Packit Service d2f85f
import Data.List (intercalate)
Packit Service d2f85f
import Data.Text (Text)
Packit Service d2f85f
import Text.Pandoc.Class
Packit Service d2f85f
import Text.Pandoc.Definition
Packit Service d2f85f
import Text.Pandoc.Options
Packit Service d2f85f
import qualified Text.Pandoc.UTF8 as UTF8
Packit Service d2f85f
import Text.Pandoc.Writers.AsciiDoc
Packit Service d2f85f
import Text.Pandoc.Writers.CommonMark
Packit Service d2f85f
import Text.Pandoc.Writers.ConTeXt
Packit Service d2f85f
import Text.Pandoc.Writers.Custom
Packit Service d2f85f
import Text.Pandoc.Writers.Docbook
Packit Service d2f85f
import Text.Pandoc.Writers.Docx
Packit Service d2f85f
import Text.Pandoc.Writers.DokuWiki
Packit Service d2f85f
import Text.Pandoc.Writers.EPUB
Packit Service d2f85f
import Text.Pandoc.Writers.FB2
Packit Service d2f85f
import Text.Pandoc.Writers.Haddock
Packit Service d2f85f
import Text.Pandoc.Writers.HTML
Packit Service d2f85f
import Text.Pandoc.Writers.ICML
Packit Service d2f85f
import Text.Pandoc.Writers.JATS
Packit Service d2f85f
import Text.Pandoc.Writers.LaTeX
Packit Service d2f85f
import Text.Pandoc.Writers.Man
Packit Service d2f85f
import Text.Pandoc.Writers.Markdown
Packit Service d2f85f
import Text.Pandoc.Writers.MediaWiki
Packit Service d2f85f
import Text.Pandoc.Writers.Ms
Packit Service d2f85f
import Text.Pandoc.Writers.Muse
Packit Service d2f85f
import Text.Pandoc.Writers.Native
Packit Service d2f85f
import Text.Pandoc.Writers.ODT
Packit Service d2f85f
import Text.Pandoc.Writers.OpenDocument
Packit Service d2f85f
import Text.Pandoc.Writers.OPML
Packit Service d2f85f
import Text.Pandoc.Writers.Org
Packit Service d2f85f
import Text.Pandoc.Writers.Powerpoint
Packit Service d2f85f
import Text.Pandoc.Writers.RST
Packit Service d2f85f
import Text.Pandoc.Writers.RTF
Packit Service d2f85f
import Text.Pandoc.Writers.TEI
Packit Service d2f85f
import Text.Pandoc.Writers.Texinfo
Packit Service d2f85f
import Text.Pandoc.Writers.Textile
Packit Service d2f85f
import Text.Pandoc.Writers.ZimWiki
Packit Service d2f85f
import Text.Parsec.Error
Packit Service d2f85f
Packit Service d2f85f
data Writer m = TextWriter (WriterOptions -> Pandoc -> m Text)
Packit Service d2f85f
              | ByteStringWriter (WriterOptions -> Pandoc -> m BL.ByteString)
Packit Service d2f85f
Packit Service d2f85f
-- | Association list of formats and writers.
Packit Service d2f85f
writers :: PandocMonad m => [ ( String, Writer m) ]
Packit Service d2f85f
writers = [
Packit Service d2f85f
   ("native"       , TextWriter writeNative)
Packit Service d2f85f
  ,("json"         , TextWriter $ \o d -> return $ writeJSON o d)
Packit Service d2f85f
  ,("docx"         , ByteStringWriter writeDocx)
Packit Service d2f85f
  ,("odt"          , ByteStringWriter writeODT)
Packit Service d2f85f
  ,("pptx"         , ByteStringWriter writePowerpoint)
Packit Service d2f85f
  ,("epub"         , ByteStringWriter writeEPUB3)
Packit Service d2f85f
  ,("epub2"        , ByteStringWriter writeEPUB2)
Packit Service d2f85f
  ,("epub3"        , ByteStringWriter writeEPUB3)
Packit Service d2f85f
  ,("fb2"          , TextWriter writeFB2)
Packit Service d2f85f
  ,("html"         , TextWriter writeHtml5String)
Packit Service d2f85f
  ,("html4"        , TextWriter writeHtml4String)
Packit Service d2f85f
  ,("html5"        , TextWriter writeHtml5String)
Packit Service d2f85f
  ,("icml"         , TextWriter writeICML)
Packit Service d2f85f
  ,("s5"           , TextWriter writeS5)
Packit Service d2f85f
  ,("slidy"        , TextWriter writeSlidy)
Packit Service d2f85f
  ,("slideous"     , TextWriter writeSlideous)
Packit Service d2f85f
  ,("dzslides"     , TextWriter writeDZSlides)
Packit Service d2f85f
  ,("revealjs"     , TextWriter writeRevealJs)
Packit Service d2f85f
  ,("docbook"      , TextWriter writeDocbook5)
Packit Service d2f85f
  ,("docbook4"     , TextWriter writeDocbook4)
Packit Service d2f85f
  ,("docbook5"     , TextWriter writeDocbook5)
Packit Service d2f85f
  ,("jats"         , TextWriter writeJATS)
Packit Service d2f85f
  ,("opml"         , TextWriter writeOPML)
Packit Service d2f85f
  ,("opendocument" , TextWriter writeOpenDocument)
Packit Service d2f85f
  ,("latex"        , TextWriter writeLaTeX)
Packit Service d2f85f
  ,("beamer"       , TextWriter writeBeamer)
Packit Service d2f85f
  ,("context"      , TextWriter writeConTeXt)
Packit Service d2f85f
  ,("texinfo"      , TextWriter writeTexinfo)
Packit Service d2f85f
  ,("man"          , TextWriter writeMan)
Packit Service d2f85f
  ,("ms"           , TextWriter writeMs)
Packit Service d2f85f
  ,("markdown"     , TextWriter writeMarkdown)
Packit Service d2f85f
  ,("markdown_strict" , TextWriter writeMarkdown)
Packit Service d2f85f
  ,("markdown_phpextra" , TextWriter writeMarkdown)
Packit Service d2f85f
  ,("markdown_github" , TextWriter writeMarkdown)
Packit Service d2f85f
  ,("markdown_mmd" , TextWriter writeMarkdown)
Packit Service d2f85f
  ,("plain"        , TextWriter writePlain)
Packit Service d2f85f
  ,("rst"          , TextWriter writeRST)
Packit Service d2f85f
  ,("mediawiki"    , TextWriter writeMediaWiki)
Packit Service d2f85f
  ,("dokuwiki"     , TextWriter writeDokuWiki)
Packit Service d2f85f
  ,("zimwiki"      , TextWriter writeZimWiki)
Packit Service d2f85f
  ,("textile"      , TextWriter writeTextile)
Packit Service d2f85f
  ,("rtf"          , TextWriter writeRTF)
Packit Service d2f85f
  ,("org"          , TextWriter writeOrg)
Packit Service d2f85f
  ,("asciidoc"     , TextWriter writeAsciiDoc)
Packit Service d2f85f
  ,("haddock"      , TextWriter writeHaddock)
Packit Service d2f85f
  ,("commonmark"   , TextWriter writeCommonMark)
Packit Service d2f85f
  ,("gfm"          , TextWriter writeCommonMark)
Packit Service d2f85f
  ,("tei"          , TextWriter writeTEI)
Packit Service d2f85f
  ,("muse"         , TextWriter writeMuse)
Packit Service d2f85f
  ]
Packit Service d2f85f
Packit Service d2f85f
-- | Retrieve writer, extensions based on formatSpec (format+extensions).
Packit Service d2f85f
getWriter :: PandocMonad m => String -> Either String (Writer m, Extensions)
Packit Service d2f85f
getWriter s
Packit Service d2f85f
  = case parseFormatSpec s of
Packit Service d2f85f
         Left e  -> Left $ intercalate "\n" [m | Message m <- errorMessages e]
Packit Service d2f85f
         Right (writerName, setExts) ->
Packit Service d2f85f
             case lookup writerName writers of
Packit Service d2f85f
                     Nothing -> Left $ "Unknown writer: " ++ writerName
Packit Service d2f85f
                     Just r -> Right (r, setExts $
Packit Service d2f85f
                                  getDefaultExtensions writerName)
Packit Service d2f85f
Packit Service d2f85f
writeJSON :: WriterOptions -> Pandoc -> Text
Packit Service d2f85f
writeJSON _ = UTF8.toText . BL.toStrict . encode