Blame src/Text/Pandoc/Writers/Native.hs

Packit Service d2f85f
{-# LANGUAGE OverloadedStrings #-}
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
Packit Service d2f85f
{- |
Packit Service d2f85f
   Module      : Text.Pandoc.Writers.Native
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
Conversion of a 'Pandoc' document to a string representation.
Packit Service d2f85f
-}
Packit Service d2f85f
module Text.Pandoc.Writers.Native ( writeNative )
Packit Service d2f85f
where
Packit Service d2f85f
import Data.List (intersperse)
Packit Service d2f85f
import Data.Text (Text)
Packit Service d2f85f
import Text.Pandoc.Class (PandocMonad)
Packit Service d2f85f
import Text.Pandoc.Definition
Packit Service d2f85f
import Text.Pandoc.Options (WrapOption (..), WriterOptions (..))
Packit Service d2f85f
import Text.Pandoc.Pretty
Packit Service d2f85f
Packit Service d2f85f
prettyList :: [Doc] -> Doc
Packit Service d2f85f
prettyList ds =
Packit Service d2f85f
  "[" <>
Packit Service d2f85f
  cat (intersperse (cr <> ",") $ map (nest 1) ds) <> "]"
Packit Service d2f85f
Packit Service d2f85f
-- | Prettyprint Pandoc block element.
Packit Service d2f85f
prettyBlock :: Block -> Doc
Packit Service d2f85f
prettyBlock (LineBlock lines') =
Packit Service d2f85f
  "LineBlock" $$ prettyList (map (text . show) lines')
Packit Service d2f85f
prettyBlock (BlockQuote blocks) =
Packit Service d2f85f
  "BlockQuote" $$ prettyList (map prettyBlock blocks)
Packit Service d2f85f
prettyBlock (OrderedList attribs blockLists) =
Packit Service d2f85f
  "OrderedList" <> space <> text (show attribs) $$
Packit Service d2f85f
  prettyList (map (prettyList . map prettyBlock) blockLists)
Packit Service d2f85f
prettyBlock (BulletList blockLists) =
Packit Service d2f85f
  "BulletList" $$
Packit Service d2f85f
  prettyList (map (prettyList . map prettyBlock) blockLists)
Packit Service d2f85f
prettyBlock (DefinitionList items) = "DefinitionList" $$
Packit Service d2f85f
  prettyList (map deflistitem items)
Packit Service d2f85f
    where deflistitem (term, defs) = "(" <> text (show term) <> "," <> cr <>
Packit Service d2f85f
           nest 1 (prettyList $ map (prettyList . map prettyBlock) defs) <> ")"
Packit Service d2f85f
prettyBlock (Table caption aligns widths header rows) =
Packit Service d2f85f
  "Table " <> text (show caption) <> " " <> text (show aligns) <> " " <>
Packit Service d2f85f
  text (show widths) $$
Packit Service d2f85f
  prettyRow header $$
Packit Service d2f85f
  prettyList (map prettyRow rows)
Packit Service d2f85f
    where prettyRow cols = prettyList (map (prettyList . map prettyBlock) cols)
Packit Service d2f85f
prettyBlock (Div attr blocks) =
Packit Service d2f85f
  text ("Div " <> show attr) $$ prettyList (map prettyBlock blocks)
Packit Service d2f85f
prettyBlock block = text $ show block
Packit Service d2f85f
Packit Service d2f85f
-- | Prettyprint Pandoc document.
Packit Service d2f85f
writeNative :: PandocMonad m => WriterOptions -> Pandoc -> m Text
Packit Service d2f85f
writeNative opts (Pandoc meta blocks) = return $
Packit Service d2f85f
  let colwidth = if writerWrapText opts == WrapAuto
Packit Service d2f85f
                    then Just $ writerColumns opts
Packit Service d2f85f
                    else Nothing
Packit Service d2f85f
      withHead = case writerTemplate opts of
Packit Service d2f85f
                      Just _  -> \bs -> text ("Pandoc (" ++ show meta ++ ")") $$
Packit Service d2f85f
                                  bs $$ cr
Packit Service d2f85f
                      Nothing -> id
Packit Service d2f85f
  in  render colwidth $ withHead $ prettyList $ map prettyBlock blocks