packages feed

pandocz-0.0.2: src/Text/Pandoc/Z/Util.hs

{-# OPTIONS_GHC -Wall #-}

module Text.Pandoc.Z.Util(
  unwrapPandoc
, readPandoc
, readPandocExtensions
, readPandocPlainExtensions
, readPandocPhpMarkdownExtraExtensions
, readPandocGithubMarkdownExtensions
, readPandocMultimarkdownExtensions
, readPandocStrictExtensions
, readPandocDefaultExtensions
, writePandoc
, writePandocExtensions
, writePandocPlainExtensions
, writePandocPhpMarkdownExtraExtensions
, writePandocGithubMarkdownExtensions
, writePandocMultimarkdownExtensions
, writePandocStrictExtensions
, writePandocDefaultExtensions
, (.~~)
) where

import Control.Lens
    ( (&), view, (.~), set, _Wrapped, ASetter, Field1(_1) )
import Data.Default ( Default(def) )
import Data.Stringz(HasText(text))
import Data.Text as Text ( Text )
import Text.Pandoc.Class ( PandocPure(unPandocPure) )
import Text.Pandoc.Error ( PandocError )
import Text.Pandoc.Extensions
    ( getDefaultExtensions,
      githubMarkdownExtensions,
      multimarkdownExtensions,
      pandocExtensions,
      phpMarkdownExtraExtensions,
      plainExtensions,
      strictExtensions )
import Text.Pandoc.Z.Extensions ( HasExtensions(extensions) )
import Text.Pandoc.Z.ReaderOptions
    ( ReaderOptions, defaultReaderOptions )
import Text.Pandoc.Z.WriterOptions
    ( WriterOptions, defaultWriterOptions )

unwrapPandoc ::
  PandocPure a
  -> Either PandocError a
unwrapPandoc x =
  view (_1 . _1) (view _Wrapped (view _Wrapped (view (_Wrapped . _Wrapped) (unPandocPure x) def) def))

readPandoc ::
  HasText s =>
  (ReaderOptions -> Text -> PandocPure a)
  -> s
  -> Either PandocError a
readPandoc f =
  unwrapPandoc . f defaultReaderOptions . view text

readPandocExtensions ::
  HasText s =>
  (ReaderOptions -> Text -> PandocPure a)
  -> s
  -> Either PandocError a
readPandocExtensions f =
  readPandoc (\o -> f (o & extensions .~ pandocExtensions))

readPandocPlainExtensions ::
  HasText s =>
  (ReaderOptions -> Text -> PandocPure a)
  -> s
  -> Either PandocError a
readPandocPlainExtensions f =
  readPandoc (\o -> f (o & extensions .~ plainExtensions))

readPandocPhpMarkdownExtraExtensions ::
  HasText s =>
  (ReaderOptions -> Text -> PandocPure a)
  -> s
  -> Either PandocError a
readPandocPhpMarkdownExtraExtensions f =
  readPandoc (\o -> f (o & extensions .~ phpMarkdownExtraExtensions))

readPandocGithubMarkdownExtensions ::
  HasText s =>
  (ReaderOptions -> Text -> PandocPure a)
  -> s
  -> Either PandocError a
readPandocGithubMarkdownExtensions f =
  readPandoc (\o -> f (o & extensions .~ githubMarkdownExtensions))

readPandocMultimarkdownExtensions ::
  HasText s =>
  (ReaderOptions -> Text -> PandocPure a)
  -> s
  -> Either PandocError a
readPandocMultimarkdownExtensions f =
  readPandoc (\o -> f (o & extensions .~ multimarkdownExtensions))

readPandocStrictExtensions ::
  HasText s =>
  (ReaderOptions -> Text -> PandocPure a)
  -> s
  -> Either PandocError a
readPandocStrictExtensions f =
  readPandoc (\o -> f (o & extensions .~ strictExtensions))

readPandocDefaultExtensions ::
  HasText s =>
  Text
  -> (ReaderOptions -> Text -> PandocPure a)
  -> s
  -> Either PandocError a
readPandocDefaultExtensions t f =
  readPandoc (\o -> f (o & extensions .~ getDefaultExtensions t))

writePandoc ::
  (WriterOptions -> b -> PandocPure a)
  -> b
  -> Either PandocError a
writePandoc f =
  unwrapPandoc . f defaultWriterOptions

writePandocExtensions ::
  (WriterOptions -> b -> PandocPure a)
  -> b
  -> Either PandocError a
writePandocExtensions f =
  writePandoc (\o -> f (o & extensions .~ pandocExtensions))

writePandocPlainExtensions ::
  (WriterOptions -> b -> PandocPure a)
  -> b
  -> Either PandocError a
writePandocPlainExtensions f =
  writePandoc (\o -> f (o & extensions .~ plainExtensions))

writePandocPhpMarkdownExtraExtensions ::
  (WriterOptions -> b -> PandocPure a)
  -> b
  -> Either PandocError a
writePandocPhpMarkdownExtraExtensions f =
  writePandoc (\o -> f (o & extensions .~ phpMarkdownExtraExtensions))

writePandocGithubMarkdownExtensions ::
  (WriterOptions -> b -> PandocPure a)
  -> b
  -> Either PandocError a
writePandocGithubMarkdownExtensions f =
  writePandoc (\o -> f (o & extensions .~ githubMarkdownExtensions))

writePandocMultimarkdownExtensions ::
  (WriterOptions -> b -> PandocPure a)
  -> b
  -> Either PandocError a
writePandocMultimarkdownExtensions f =
  writePandoc (\o -> f (o & extensions .~ multimarkdownExtensions))

writePandocStrictExtensions ::
  (WriterOptions -> b -> PandocPure a)
  -> b
  -> Either PandocError a
writePandocStrictExtensions f =
  writePandoc (\o -> f (o & extensions .~ strictExtensions))

writePandocDefaultExtensions ::
  Text
  -> (WriterOptions -> b -> PandocPure a)
  -> b
  -> Either PandocError a
writePandocDefaultExtensions t f =
  writePandoc (\o -> f (o & extensions .~ getDefaultExtensions t))

(.~~) ::
  Monoid s =>
  ASetter s t a b
  -> b
  -> t
r .~~ x =
  set r x mempty

infixr 4 .~~