----------------------------------------------------------------------------- -- | -- Module : Text.Trifecta.Literate.Prim -- Copyright : (C) 2011 Edward Kmett -- License : BSD-style (see the file LICENSE) -- -- Maintainer : Edward Kmett -- 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)