{-# OPTIONS_GHC -Wall #-}

module Text.Pandoc.Z.Combinators where

import Control.Lens
import Data.Stringz
import Text.Pandoc.Z.Definition

-- | @str :: HasText s => s -> Inline@
str ::
  (HasText s, AsInline i) =>
  s
  -> i
str :: forall s i. (HasText s, AsInline i) => s -> i
str =
  AReview i Text -> Text -> i
forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review AReview i Text
forall a. AsInline a => Prism' a Text
Prism' i Text
_Str (Text -> i) -> (s -> Text) -> s -> i
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting Text s Text -> s -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Text s Text
forall a. HasText a => Lens' a Text
Lens' s Text
text

-- | @plainStr :: HasText s => s -> Block@
plainStr ::
  (HasText s, AsBlock t) =>
  s
  -> t
plainStr :: forall s t. (HasText s, AsBlock t) => s -> t
plainStr =
  AReview t [Inline] -> [Inline] -> t
forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review AReview t [Inline]
forall a. AsBlock a => Prism' a [Inline]
Prism' t [Inline]
_Plain ([Inline] -> t) -> (s -> [Inline]) -> s -> t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Inline -> [Inline]
forall a. a -> [a]
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Inline -> [Inline]) -> (s -> Inline) -> s -> [Inline]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> Inline
forall s i. (HasText s, AsInline i) => s -> i
str

-- | @paraStr :: HasText s => s -> Block@
paraStr ::
  (HasText s, AsBlock t) =>
  s
  -> t
paraStr :: forall s t. (HasText s, AsBlock t) => s -> t
paraStr =
  AReview t [Inline] -> [Inline] -> t
forall b (m :: * -> *) t. MonadReader b m => AReview t b -> m t
review AReview t [Inline]
forall a. AsBlock a => Prism' a [Inline]
Prism' t [Inline]
_Para ([Inline] -> t) -> (s -> [Inline]) -> s -> t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Inline -> [Inline]
forall a. a -> [a]
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Inline -> [Inline]) -> (s -> Inline) -> s -> [Inline]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. s -> Inline
forall s i. (HasText s, AsInline i) => s -> i
str

-- | @attribute :: HasText s => s -> Attr@
attribute ::
  (HasText s, HasAttr a, Monoid a) =>
  s
  -> a
attribute :: forall s a. (HasText s, HasAttr a, Monoid a) => s -> a
attribute s
s =
  a
forall a. Monoid a => a
mempty a -> (a -> a) -> a
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text) -> a -> Identity a
forall a. HasAttr a => Lens' a Text
Lens' a Text
identifier ((Text -> Identity Text) -> a -> Identity a) -> Text -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Getting Text s Text -> s -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Text s Text
forall a. HasText a => Lens' a Text
Lens' s Text
text s
s

-- | @span :: HasText s => s -> Span@
span' ::
  (HasText s, Monoid a, HasAttr a) =>
  s
  -> a
span' :: forall s a. (HasText s, Monoid a, HasAttr a) => s -> a
span' s
s =
  a
forall a. Monoid a => a
mempty a -> (a -> a) -> a
forall a b. a -> (a -> b) -> b
& (Attr -> Identity Attr) -> a -> Identity a
forall a. HasAttr a => Lens' a Attr
Lens' a Attr
attr ((Attr -> Identity Attr) -> a -> Identity a) -> Attr -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
.~ s -> Attr
forall s a. (HasText s, HasAttr a, Monoid a) => s -> a
attribute s
s

-- @code' :: (HasText s1, HasText s2) => s1 -> s2 -> Code@
code' ::
  (HasAttr a, Monoid a, HasText a, HasText s1, HasText s2) =>
  s1
  -> s2
  -> a
code' :: forall a s1 s2.
(HasAttr a, Monoid a, HasText a, HasText s1, HasText s2) =>
s1 -> s2 -> a
code' s1
s1 s2
s2 =
  a
forall a. Monoid a => a
mempty a -> (a -> a) -> a
forall a b. a -> (a -> b) -> b
& (Attr -> Identity Attr) -> a -> Identity a
forall a. HasAttr a => Lens' a Attr
Lens' a Attr
attr ((Attr -> Identity Attr) -> a -> Identity a) -> Attr -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
.~ s1 -> Attr
forall s a. (HasText s, HasAttr a, Monoid a) => s -> a
attribute s1
s1
         a -> (a -> a) -> a
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text) -> a -> Identity a
forall a. HasText a => Lens' a Text
Lens' a Text
text ((Text -> Identity Text) -> a -> Identity a) -> Text -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Getting Text s2 Text -> s2 -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Text s2 Text
forall a. HasText a => Lens' a Text
Lens' s2 Text
text s2
s2

displayMath ::
  HasText s =>
  s
  -> Math
displayMath :: forall s. HasText s => s -> Math
displayMath =
  MathType -> Text -> Math
Math MathType
DisplayMath (Text -> Math) -> (s -> Text) -> s -> Math
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting Text s Text -> s -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Text s Text
forall a. HasText a => Lens' a Text
Lens' s Text
text

inlineMath ::
  HasText s =>
  s
  -> Math
inlineMath :: forall s. HasText s => s -> Math
inlineMath =
  MathType -> Text -> Math
Math MathType
InlineMath (Text -> Math) -> (s -> Text) -> s -> Math
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Getting Text s Text -> s -> Text
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Text s Text
forall a. HasText a => Lens' a Text
Lens' s Text
text

-- | @cellXY :: RowSpan -> ColSpan -> Cell@
cellXY ::
  (Monoid a, HasRowSpan a, HasColSpan a) =>
  RowSpan
  -> ColSpan
  -> a
cellXY :: forall a.
(Monoid a, HasRowSpan a, HasColSpan a) =>
RowSpan -> ColSpan -> a
cellXY RowSpan
x ColSpan
y =
  a
forall a. Monoid a => a
mempty
  a -> (a -> a) -> a
forall a b. a -> (a -> b) -> b
& (RowSpan -> Identity RowSpan) -> a -> Identity a
forall a. HasRowSpan a => Lens' a RowSpan
Lens' a RowSpan
rowSpan ((RowSpan -> Identity RowSpan) -> a -> Identity a)
-> RowSpan -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
.~ RowSpan
x
  a -> (a -> a) -> a
forall a b. a -> (a -> b) -> b
& (ColSpan -> Identity ColSpan) -> a -> Identity a
forall a. HasColSpan a => Lens' a ColSpan
Lens' a ColSpan
colSpan ((ColSpan -> Identity ColSpan) -> a -> Identity a)
-> ColSpan -> a -> a
forall s t a b. ASetter s t a b -> b -> s -> t
.~ ColSpan
y

linkImage ::
  Iso'
    Link
    Image
linkImage :: Iso' Link Image
linkImage =
  (Link -> Image) -> (Image -> Link) -> Iso' Link Image
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso
    (\(Link Attr
a [Inline]
i Target
t) -> Attr -> [Inline] -> Target -> Image
Image Attr
a [Inline]
i Target
t)
    (\(Image Attr
a [Inline]
i Target
t) -> Attr -> [Inline] -> Target -> Link
Link Attr
a [Inline]
i Target
t)