packages feed

pandocz-0.0.1: src/Text/Pandoc/Z/ReaderOptions.hs

{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE TypeFamilies #-}

module Text.Pandoc.Z.ReaderOptions(
  HasReaderOptions(..)
, AsReaderOptions(..)
, HasTrackChanges(..)
, AsTrackChanges(..)
, ReaderOptions(ReaderOptions)
, defaultReaderOptions
) where

import Control.Lens ( prism', Lens', Prism' )
import Data.Set ( Set )
import qualified Data.Set as Set
import Data.Text ( Text )
import qualified Data.Text as Text
import Text.Pandoc.Options(ReaderOptions(ReaderOptions), TrackChanges(..))

class HasReaderOptions a where
  readerOptions ::
    Lens' a ReaderOptions
  standalone ::
    Lens' a Bool
  standalone =
    readerOptions . standalone
  indentedCodeClasses ::
    Lens' a [Text]
  indentedCodeClasses =
    readerOptions . indentedCodeClasses
  abbreviations ::
    Lens' a (Set Text)
  abbreviations =
    readerOptions . abbreviations
  defaultImageExtension ::
    Lens' a Text
  defaultImageExtension =
    readerOptions . defaultImageExtension
  stripComments ::
    Lens' a Bool
  stripComments =
    readerOptions . stripComments

instance HasReaderOptions ReaderOptions where
  readerOptions =
    id
  standalone f (ReaderOptions e s c t i a g h m) =
    fmap (\s' -> ReaderOptions e s' c t i a g h m) (f s)
  indentedCodeClasses f (ReaderOptions e s c t i a g h m) =
    fmap (\i' -> ReaderOptions e s c t i' a g h m) (f i)
  abbreviations f (ReaderOptions e s c t i a g h m) =
    fmap (\a' -> ReaderOptions e s c t i a' g h m) (f a)
  defaultImageExtension f (ReaderOptions e s c t i a g h m) =
    fmap (\g' -> ReaderOptions e s c t i a g' h m) (f g)
  stripComments f (ReaderOptions e s c t i a g h m) =
    fmap (ReaderOptions e s c t i a g h) (f m)

class AsReaderOptions a where
  _ReaderOptions ::
    Prism' a ReaderOptions

instance AsReaderOptions ReaderOptions where
  _ReaderOptions =
    id

class HasTrackChanges a where
  trackChanges ::
    Lens' a TrackChanges

instance HasTrackChanges TrackChanges where
  trackChanges =
    id

instance HasTrackChanges ReaderOptions where
  trackChanges f (ReaderOptions e s c t i a g h m) =
    fmap (\h' -> ReaderOptions e s c t i a g h' m) (f h)

class AsTrackChanges a where
  _TrackChanges ::
    Prism' a TrackChanges
  _AcceptChanges ::
    Prism' a ()
  _AcceptChanges =
    _TrackChanges . _AcceptChanges
  _RejectChanges ::
    Prism' a ()
  _RejectChanges =
    _TrackChanges . _RejectChanges
  _AllChanges ::
    Prism' a ()
  _AllChanges =
    _TrackChanges . _AllChanges

instance AsTrackChanges TrackChanges where
  _TrackChanges =
    id
  _AcceptChanges =
    prism'
      (\() -> AcceptChanges)
      (\case
        AcceptChanges -> Just ()
        _ -> Nothing)
  _RejectChanges =
    prism'
      (\() -> RejectChanges)
      (\case
        RejectChanges -> Just ()
        _ -> Nothing)
  _AllChanges =
    prism'
      (\() -> AllChanges)
      (\case
        AllChanges -> Just ()
        _ -> Nothing)

defaultReaderOptions ::
  ReaderOptions
defaultReaderOptions =
  ReaderOptions
    mempty
    False
    80
    4
    []
    (
      Set.fromList (
        fmap Text.pack [
          "Mr.", "Mrs.", "Ms.", "Capt.", "Dr.", "Prof.",
          "Gen.", "Gov.", "e.g.", "i.e.", "Sgt.", "St.",
          "vol.", "vs.", "Sen.", "Rep.", "Pres.", "Hon.",
          "Rev.", "Ph.D.", "M.D.", "M.A.", "p.", "pp.",
          "ch.", "sec.", "cf.", "cp."
        ]
        )
    )
    mempty
    AcceptChanges
    False