trifecta-0.53: src/Text/Trifecta/Literate/Prim.hs
-----------------------------------------------------------------------------
-- |
-- Module : Text.Trifecta.Literate.Prim
-- Copyright : (C) 2011 Edward Kmett
-- License : BSD-style (see the file LICENSE)
--
-- Maintainer : Edward Kmett <ekmett@gmail.com>
-- Stability : experimental
-- Portability : non-portable
--
----------------------------------------------------------------------------
module Text.Trifecta.Literate.Prim
( LiterateState(..)
, defaultLiterateState
, LiterateMark(..)
) where
import Data.Functor
import Data.Foldable
import Data.Traversable
import Data.Semigroup
import Data.Semigroup.Foldable
import Data.Semigroup.Traversable
import Text.Trifecta.Rope.Bytes
import Text.Trifecta.Rope.Delta
data LiterateState
= LiterateStart -- ^ Parsing literate syntax
| IlliterateStart -- ^ Disable literate parsing
| LiterateCode -- ^ In the midst of a @\begin{code} ... \end{code}@ block
| LiterateTrack -- ^ In the midst of a @> ...@ block
defaultLiterateState :: LiterateState
defaultLiterateState = LiterateStart
data LiterateMark d = LiterateMark LiterateState d
instance Functor LiterateMark where
fmap f (LiterateMark s a) = LiterateMark s (f a)
instance Foldable LiterateMark where
foldMap f (LiterateMark _ a) = f a
instance Traversable LiterateMark where
traverse f (LiterateMark s a) = LiterateMark s <$> f a
instance Foldable1 LiterateMark where
foldMap1 f (LiterateMark _ a) = f a
instance Traversable1 LiterateMark where
traverse1 f (LiterateMark s a) = LiterateMark s <$> f a
instance HasDelta d => HasDelta (LiterateMark d) where
delta (LiterateMark _ d) = delta d
instance HasBytes d => HasBytes (LiterateMark d) where
bytes (LiterateMark _ d) = bytes d
instance Semigroup d => Semigroup (LiterateMark d) where
LiterateMark _ d <> LiterateMark s e = LiterateMark s (d <> e)