{-# LANGUAGE OverloadedStrings #-}

module Text.Authoring.Combinator.Meta where

import Control.Monad.Writer
import Data.Text (Text)

import Text.Authoring.Document
import Text.Authoring.Combinator.Writer


-- | wrap the argument @x@ using curly braces "{x}"

braces :: (MonadWriter t m, HasDocument t) => m () -> m ()
braces con = do
  raw "{"
  con
  raw "}"

-- | command0 x = "\x "

command0 :: (MonadWriter t m, HasDocument t) =>  Text -> m ()
command0 x = do
  raw "\\"  
  raw x
  raw "{}"  

  
-- | command1 x con = "\x{con}"

command1 :: (MonadWriter t m, HasDocument t) =>  Text -> m () -> m ()
command1 x con = do
  raw "\\"  
  raw x
  raw "{"
  con
  raw "}"
       
-- | commandI x con = "{\x con}"

commandI :: (MonadWriter t m, HasDocument t) =>  Text -> m () -> m ()
commandI x con = do
  raw "{\\"
  raw x
  raw " "
  con
  raw "}"

    
-- | environment x con = "\begin{x}con\end{x}"    
  
environment :: (MonadWriter t m, HasDocument t) =>  Text -> m () -> m ()
environment x con = do
  raw "\\begin{"  
  raw x
  raw "}"  
  con
  raw "\\end{"  
  raw x
  raw "}"