module Hakyllbars.Source.Lexer where
import Data.Functor
import Data.Maybe
import Data.Scientific
import Data.String
import Hakyllbars.Source.Util
import Text.Parsec hiding (runParser, token, tokens, (<?>))
import Prelude hiding (lex)
type Lexer a = Parsec String ParserState a
lex :: SourceName -> String -> Either ParseError [Token]
lex :: String -> String -> Either ParseError [Token]
lex = forall s t a.
Stream s Identity t =>
Parsec s ParserState a -> String -> s -> Either ParseError a
runParser forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill Lexer Token
token forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof
token :: Lexer Token
token :: Lexer Token
token =
forall (m :: * -> *) s.
Monad m =>
ParsecT s ParserState m LexerMode
getLexerMode forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
LexerMode
BlockMode -> do
forall t s (m :: * -> *).
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m ()
trace String
"BlockMode"
Lexer Token
blockToken forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Token
t -> case Token
t of
TaggedToken TokenTag
TurnOffToken SourcePos
_ -> Token
t forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall t s (m :: * -> *).
(Show t, Stream s m t) =>
ParsecT s ParserState m ()
startFenced
TaggedToken TokenTag
CommentBlockToken SourcePos
_ -> Token
t forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall t s (m :: * -> *).
(Show t, Stream s m t) =>
ParsecT s ParserState m ()
startFenced
TaggedToken TokenTag
CloseBlockToken SourcePos
_ -> Token
t forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall t s (m :: * -> *).
(Show t, Stream s m t) =>
ParsecT s ParserState m ()
startText
Token
_ -> forall (m :: * -> *) a. Monad m => a -> m a
return Token
t
LexerMode
TextMode -> do
forall t s (m :: * -> *).
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m ()
trace String
"TextMode"
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne
[ do
forall (f :: * -> *) a. Functor f => f a -> f ()
void forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m a
lookAhead forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne [forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ParsecT String ParserState Identity String
trimmingOpen, ParsecT String ParserState Identity String
open]
forall t s (m :: * -> *).
(Show t, Stream s m t) =>
ParsecT s ParserState m ()
startBlock
Lexer Token
token,
Lexer Token
textToken
]
FencedMode {} -> do
forall t s (m :: * -> *).
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m ()
trace String
"FencedMode"
Lexer Token
fencedText
startText :: (Show t, Stream s m t) => ParsecT s ParserState m ()
startText :: forall t s (m :: * -> *).
(Show t, Stream s m t) =>
ParsecT s ParserState m ()
startText = forall (m :: * -> *) s.
Monad m =>
LexerMode -> ParsecT s ParserState m ()
putLexerMode LexerMode
TextMode forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> String
"starting text"
startBlock :: (Show t, Stream s m t) => ParsecT s ParserState m ()
startBlock :: forall t s (m :: * -> *).
(Show t, Stream s m t) =>
ParsecT s ParserState m ()
startBlock = forall (m :: * -> *) s.
Monad m =>
LexerMode -> ParsecT s ParserState m ()
putLexerMode LexerMode
BlockMode forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> String
"starting block"
startFenced :: (Show t, Stream s m t) => ParsecT s ParserState m ()
startFenced :: forall t s (m :: * -> *).
(Show t, Stream s m t) =>
ParsecT s ParserState m ()
startFenced = forall (m :: * -> *) s.
Monad m =>
LexerMode -> ParsecT s ParserState m ()
putLexerMode (Int -> LexerMode
FencedMode Int
1) forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> String
"starting fenced text"
illegalState :: (Show t, Stream s m t) => ParsecT s ParserState m a
illegalState :: forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a
illegalState = forall {s} {b}. ParsecT s ParserState m b
p forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> String
"illegal state"
where
p :: ParsecT s ParserState m b
p = do
LexerMode
mode <- forall (m :: * -> *) s.
Monad m =>
ParsecT s ParserState m LexerMode
getLexerMode
forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall a b. (a -> b) -> a -> b
$ String
"Illegal lexer mode: " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show LexerMode
mode
blockToken :: Lexer Token
blockToken :: Lexer Token
blockToken =
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne
[ Lexer Token
symbolToken,
Lexer Token
numberToken,
Lexer Token
boolToken,
Lexer Token
endKeyword,
Lexer Token
elseKeyword,
Lexer Token
nameToken,
Lexer Token
stringToken
]
textToken :: Lexer Token
textToken :: Lexer Token
textToken = forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m (SourcePos -> a) -> ParsecT s u m a
withPosition (String -> SourcePos -> Token
TextToken forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String ParserState Identity String
text) forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> String
"text"
fencedText :: Lexer Token
fencedText :: Lexer Token
fencedText = forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m (SourcePos -> a) -> ParsecT s u m a
withPosition (String -> SourcePos -> Token
TextToken forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> ParsecT String ParserState Identity String
p String
"")
where
p :: String -> ParsecT String ParserState Identity String
p String
acc =
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne
[ String -> ParsecT String ParserState Identity String
downFence String
acc,
String -> ParsecT String ParserState Identity String
upFence String
acc,
String -> ParsecT String ParserState Identity String
fenceText String
acc
]
downFence :: String -> ParsecT String ParserState Identity String
downFence String
acc = do
forall t s (m :: * -> *).
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m ()
trace String
"downFence"
String
x <- ParsecT String ParserState Identity String
open
ParsecT String ParserState Identity ()
downFenceLevel
String -> ParsecT String ParserState Identity String
p (String
acc forall a. [a] -> [a] -> [a]
++ String
x)
upFence :: String -> ParsecT String ParserState Identity String
upFence String
acc = do
forall t s (m :: * -> *).
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m ()
trace String
"upFence"
forall (f :: * -> *) a. Functor f => f a -> f ()
void forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m a
lookAhead forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne [ParsecT String ParserState Identity String
trimmingClose, ParsecT String ParserState Identity String
close]
ParsecT String ParserState Identity Int
upFenceLevel forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Int
0 -> do
forall t s (m :: * -> *).
(Show t, Stream s m t) =>
ParsecT s ParserState m ()
startBlock
forall (m :: * -> *) a. Monad m => a -> m a
return String
acc
Int
_ -> do
String
x <- forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne [ParsecT String ParserState Identity String
trimmingClose, ParsecT String ParserState Identity String
close]
String -> ParsecT String ParserState Identity String
p (String
acc forall a. [a] -> [a] -> [a]
++ String
x)
fenceText :: String -> ParsecT String ParserState Identity String
fenceText String
acc = do
forall t s (m :: * -> *).
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m ()
trace String
"fenceText"
String
t <- ParsecT String ParserState Identity String
text
String -> ParsecT String ParserState Identity String
p (String
acc forall a. [a] -> [a] -> [a]
++ String
t)
downFenceLevel :: ParsecT String ParserState Identity ()
downFenceLevel = do
Int
n <- forall a. Enum a => a -> a
succ forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String ParserState Identity Int
fenceLevel
forall (m :: * -> *) s.
Monad m =>
LexerMode -> ParsecT s ParserState m ()
putLexerMode forall a b. (a -> b) -> a -> b
$ Int -> LexerMode
FencedMode Int
n
upFenceLevel :: ParsecT String ParserState Identity Int
upFenceLevel = do
Int
n <- forall a. Enum a => a -> a
pred forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String ParserState Identity Int
fenceLevel
forall (m :: * -> *) s.
Monad m =>
LexerMode -> ParsecT s ParserState m ()
putLexerMode forall a b. (a -> b) -> a -> b
$ Int -> LexerMode
FencedMode Int
n
forall (m :: * -> *) a. Monad m => a -> m a
return Int
n
fenceLevel :: ParsecT String ParserState Identity Int
fenceLevel =
forall (m :: * -> *) s.
Monad m =>
ParsecT s ParserState m LexerMode
getLexerMode forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
FencedMode Int
n -> forall (m :: * -> *) a. Monad m => a -> m a
return Int
n
LexerMode
_ -> forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a
illegalState
text :: Lexer String
text :: ParsecT String ParserState Identity String
text = forall a. Monoid a => [a] -> a
mconcat forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall s (m :: * -> *) t u a end.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
manyTill ParsecT String ParserState Identity String
p (forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m a
lookAhead forall a b. (a -> b) -> a -> b
$ forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try ParsecT String ParserState Identity String
end)
where
p :: ParsecT String ParserState Identity String
p =
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne
[ forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"TextString" forall a b. (a -> b) -> a -> b
$ forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many1 (forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
noneOf String
"-{}\\\n\t "),
forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"Just '{'" forall a b. (a -> b) -> a -> b
$ ParsecT String ParserState Identity String
openBrace forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
notFollowedBy (forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try ParsecT String ParserState Identity String
openBrace),
forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"Just '}'" forall a b. (a -> b) -> a -> b
$ ParsecT String ParserState Identity String
closeBrace forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
notFollowedBy (forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try ParsecT String ParserState Identity String
closeBrace),
forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"Just '-'" forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
"-" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
notFollowedBy (forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try ParsecT String ParserState Identity String
closeBrace),
forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"Just '\\'" forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
"\\" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
notFollowedBy (forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try ParsecT String ParserState Identity String
escapedText),
forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"EscapedText" forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'\\' forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ParsecT String ParserState Identity String
escapedText,
forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"SpaceString" forall a b. (a -> b) -> a -> b
$ forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many1 forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
space forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
notFollowedBy (forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try ParsecT String ParserState Identity String
trimmingOpen)
]
escapedText :: ParsecT String ParserState Identity String
escapedText =
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne
[ ParsecT String ParserState Identity String
openBrace,
ParsecT String ParserState Identity String
closeBrace,
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
"-",
forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
"\\"
]
end :: ParsecT String ParserState Identity String
end =
forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"text terminator" forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne forall a b. (a -> b) -> a -> b
$
[ forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ParsecT String ParserState Identity String
trimmingOpen,
ParsecT String ParserState Identity String
trimmingClose,
ParsecT String ParserState Identity String
open,
ParsecT String ParserState Identity String
close,
String
"" forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall s (m :: * -> *) t u.
(Stream s m t, Show t) =>
ParsecT s u m ()
eof
]
symbolToken :: Lexer Token
symbolToken :: Lexer Token
symbolToken =
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m (SourcePos -> a) -> ParsecT s u m a
withPosition forall a b. (a -> b) -> a -> b
$
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne
[ forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne
[ forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkTrimmingSymbol TokenTag
TurnOffToken,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkTrimmingSymbol TokenTag
CommentBlockToken,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkTrimmingSymbol TokenTag
AltBlockToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkTrimmingSymbol TokenTag
ChromeBlockToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkTrimmingSymbol TokenTag
ExpressionBlockToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
],
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkTrimmingSymbol TokenTag
CloseBlockToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
TurnOffToken,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
CommentBlockToken,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
AltBlockToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
ChromeBlockToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
ExpressionBlockToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
CloseBlockToken,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
OpenBraceToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
CloseBraceToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
OpenParenToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
CloseParenToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
OpenBracketToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
CloseBracketToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
PipeToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
ColonToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
DotToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces,
forall {s} {m :: * -> *}.
Stream s m Char =>
TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
CommaToken forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
]
where
mkSymbol :: TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkSymbol TokenTag
t = TokenTag -> SourcePos -> Token
TaggedToken TokenTag
t forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string (TokenTag -> String
tokenTagValue TokenTag
t) forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> forall a. Show a => a -> String
show TokenTag
t
mkTrimmingSymbol :: TokenTag -> ParsecT s ParserState m (SourcePos -> Token)
mkTrimmingSymbol TokenTag
t = TokenTag -> SourcePos -> Token
TaggedToken TokenTag
t forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string (TokenTag -> String
trimmingTokenTagValue TokenTag
t) forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> TokenTag -> String
showTrimmingTokenTag TokenTag
t
boolToken :: Lexer Token
boolToken :: Lexer Token
boolToken = forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m (SourcePos -> a) -> ParsecT s u m a
withPosition (Bool -> SourcePos -> Token
BoolToken forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String ParserState Identity Bool
value) forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> String
"BoolToken"
where
value :: ParsecT String ParserState Identity Bool
value =
Bool
True forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne [String -> ParsecT String ParserState Identity ()
keyword String
"True", String -> ParsecT String ParserState Identity ()
keyword String
"true"]
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Bool
False forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne [String -> ParsecT String ParserState Identity ()
keyword String
"False", String -> ParsecT String ParserState Identity ()
keyword String
"false"]
stringToken :: Lexer Token
stringToken :: Lexer Token
stringToken = forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"StringToken" forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m (SourcePos -> a) -> ParsecT s u m a
withPosition forall a b. (a -> b) -> a -> b
$ (String -> SourcePos -> Token
StringToken forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String ParserState Identity String
stringChars) forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
where
stringChars :: ParsecT String ParserState Identity String
stringChars =
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne
[ forall s (m :: * -> *) t u open close a.
Stream s m t =>
ParsecT s u m open
-> ParsecT s u m close -> ParsecT s u m a -> ParsecT s u m a
between forall {u}. ParsecT String u Identity Char
squote forall {u}. ParsecT String u Identity Char
squote forall a b. (a -> b) -> a -> b
$ forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
noneOf String
"\\\'\n" forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String ParserState Identity Char
escapeChar),
forall s (m :: * -> *) t u open close a.
Stream s m t =>
ParsecT s u m open
-> ParsecT s u m close -> ParsecT s u m a -> ParsecT s u m a
between forall {u}. ParsecT String u Identity Char
dquote forall {u}. ParsecT String u Identity Char
dquote forall a b. (a -> b) -> a -> b
$ forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
noneOf String
"\\\"\n" forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ParsecT String ParserState Identity Char
escapeChar)
]
squote :: ParsecT String u Identity Char
squote = forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'\''
dquote :: ParsecT String u Identity Char
dquote = forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'"'
escapeChar :: ParsecT String ParserState Identity Char
escapeChar =
forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"EscapeChar" forall a b. (a -> b) -> a -> b
$
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'\\'
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne
[ forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'\\',
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'\'',
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'"',
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'n' forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\n',
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
't' forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> Char
'\t'
]
numberToken :: Lexer Token
numberToken :: Lexer Token
numberToken = forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m (SourcePos -> a) -> ParsecT s u m a
withPosition (ParsecT String ParserState Identity (SourcePos -> Token)
numberToken' forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces)
where
numberToken' :: ParsecT String ParserState Identity (SourcePos -> Token)
numberToken' = do
String
value <- ParsecT String ParserState Identity String
ints forall a. Semigroup a => a -> a -> a
<> forall s (m :: * -> *) t a u.
Stream s m t =>
a -> ParsecT s u m a -> ParsecT s u m a
option String
"" ParsecT String ParserState Identity String
doubles
forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
notFollowedBy ParsecT String ParserState Identity Char
badChars
case (forall a. Read a => String -> a
read String
value :: Scientific) of
Scientific
n | Scientific -> Bool
isInteger Scientific
n -> forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"IntToken" forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> SourcePos -> Token
IntToken forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. HasCallStack => Maybe a -> a
fromJust forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall i. (Integral i, Bounded i) => Scientific -> Maybe i
toBoundedInteger forall a b. (a -> b) -> a -> b
$ Scientific
n
Scientific
n | Bool
otherwise -> forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"DoubleToken" forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> SourcePos -> Token
DoubleToken forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. RealFloat a => Scientific -> a
toRealFloat forall a b. (a -> b) -> a -> b
$ Scientific
n
ints :: ParsecT String ParserState Identity String
ints = forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"IntegerDigits" forall a b. (a -> b) -> a -> b
$ ParsecT String ParserState Identity String
justZero forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> ((:) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String ParserState Identity Char
nonZero forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit)
justZero :: ParsecT String ParserState Identity String
justZero = forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"JustZero" forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
"0" forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
notFollowedBy ParsecT String ParserState Identity Char
nonZero
nonZero :: ParsecT String ParserState Identity Char
nonZero = forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"NonZeroDigit" forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
oneOf [Char
'1' .. Char
'9']
doubles :: ParsecT String ParserState Identity String
doubles = forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"DoubleDigits" forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
"." forall a. Semigroup a => a -> a -> a
<> forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many1 forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
digit
badChars :: ParsecT String ParserState Identity Char
badChars = forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"BadNumberChar" forall a b. (a -> b) -> a -> b
$ forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
oneOf String
"_." forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
alphaNum
nameToken :: Lexer Token
nameToken :: Lexer Token
nameToken = forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m (SourcePos -> a) -> ParsecT s u m a
withPosition forall a b. (a -> b) -> a -> b
$ (String -> SourcePos -> Token
NameToken forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String ParserState Identity String
name forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> String
"NameToken") forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
endKeyword :: Lexer Token
endKeyword :: Lexer Token
endKeyword = forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m (SourcePos -> a) -> ParsecT s u m a
withPosition do
String -> ParsecT String ParserState Identity ()
keyword (TokenTag -> String
tokenTagValue TokenTag
EndToken)
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ TokenTag -> SourcePos -> Token
TaggedToken TokenTag
EndToken
elseKeyword :: Lexer Token
elseKeyword :: Lexer Token
elseKeyword = forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m (SourcePos -> a) -> ParsecT s u m a
withPosition do
String -> ParsecT String ParserState Identity ()
keyword (TokenTag -> String
tokenTagValue TokenTag
ElseToken)
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ TokenTag -> SourcePos -> Token
TaggedToken TokenTag
ElseToken
keyword :: String -> Lexer ()
keyword :: String -> ParsecT String ParserState Identity ()
keyword String
s = forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled (String
"Keyword " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show String
s) do
() forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string String
s forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) t a u.
(Stream s m t, Show a) =>
ParsecT s u m a -> ParsecT s u m ()
notFollowedBy ParsecT String ParserState Identity Char
nameRest forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m ()
spaces
name :: Lexer String
name :: ParsecT String ParserState Identity String
name = forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
String -> ParsecT s ParserState m a -> ParsecT s ParserState m a
labeled String
"NameValue" do
(:) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ParsecT String ParserState Identity Char
nameStart forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many ParsecT String ParserState Identity Char
nameRest
nameStart :: Lexer Char
nameStart :: ParsecT String ParserState Identity Char
nameStart = forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m Char
oneOf (Char
'_' forall a. a -> [a] -> [a]
: [Char
'a' .. Char
'z'])
nameRest :: Lexer Char
nameRest :: ParsecT String ParserState Identity Char
nameRest = forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
tryOne [ParsecT String ParserState Identity Char
nameStart, forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
alphaNum]
data Token
= TaggedToken TokenTag SourcePos
| BoolToken Bool SourcePos
| NameToken String SourcePos
| StringToken String SourcePos
| IntToken Int SourcePos
| DoubleToken Double SourcePos
| TextToken String SourcePos
deriving (Token -> Token -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Token -> Token -> Bool
$c/= :: Token -> Token -> Bool
== :: Token -> Token -> Bool
$c== :: Token -> Token -> Bool
Eq)
instance Show Token where
show :: Token -> String
show Token
t = case Token
t of
TaggedToken TokenTag
tt SourcePos
_ -> forall a. Show a => a -> String
show TokenTag
tt
BoolToken Bool
b SourcePos
_ -> String
"Bool " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show Bool
b
NameToken String
s SourcePos
_ -> String
"Name " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show String
s
StringToken String
s SourcePos
_ -> String
"String " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show String
s
IntToken Int
n SourcePos
_ -> String
"Int " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show Int
n
DoubleToken Double
x SourcePos
_ -> String
"Double " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show Double
x
TextToken String
s SourcePos
_ -> String
"Text " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show String
s
getTokenPos :: Token -> SourcePos
getTokenPos :: Token -> SourcePos
getTokenPos = \case
TaggedToken TokenTag
_ SourcePos
pos -> SourcePos
pos
BoolToken Bool
_ SourcePos
pos -> SourcePos
pos
NameToken String
_ SourcePos
pos -> SourcePos
pos
StringToken String
_ SourcePos
pos -> SourcePos
pos
IntToken Int
_ SourcePos
pos -> SourcePos
pos
DoubleToken Double
_ SourcePos
pos -> SourcePos
pos
TextToken String
_ SourcePos
pos -> SourcePos
pos
data TokenTag
= ExpressionBlockToken
|
| AltBlockToken
| ChromeBlockToken
| CloseBlockToken
| OpenParenToken
| CloseParenToken
| OpenBraceToken
| CloseBraceToken
| OpenBracketToken
| CloseBracketToken
| PipeToken
| CommaToken
| DotToken
| ColonToken
| EndToken
| ElseToken
| TurnOffToken
deriving (TokenTag -> TokenTag -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TokenTag -> TokenTag -> Bool
$c/= :: TokenTag -> TokenTag -> Bool
== :: TokenTag -> TokenTag -> Bool
$c== :: TokenTag -> TokenTag -> Bool
Eq)
tokenTagName :: TokenTag -> String
tokenTagName :: TokenTag -> String
tokenTagName = \case
TokenTag
ExpressionBlockToken -> String
"ExpressionBlock"
TokenTag
CommentBlockToken -> String
"CommentBlock"
TokenTag
AltBlockToken -> String
"AltBlock"
TokenTag
ChromeBlockToken -> String
"ChromeBlock"
TokenTag
CloseBlockToken -> String
"CloseBlock"
TokenTag
OpenParenToken -> String
"OpenParen"
TokenTag
CloseParenToken -> String
"CloseParen"
TokenTag
OpenBracketToken -> String
"OpenBracket"
TokenTag
CloseBracketToken -> String
"CloseBracket"
TokenTag
OpenBraceToken -> String
"OpenBrace"
TokenTag
CloseBraceToken -> String
"CloseBrace"
TokenTag
PipeToken -> String
"PipeToken"
TokenTag
CommaToken -> String
"CommaToken"
TokenTag
DotToken -> String
"DotToken"
TokenTag
ColonToken -> String
"ColonToken"
TokenTag
EndToken -> String
"EndToken"
TokenTag
ElseToken -> String
"ElseToken"
TokenTag
TurnOffToken -> String
"TurnOff"
tokenTagValue :: TokenTag -> String
tokenTagValue :: TokenTag -> String
tokenTagValue = \case
TokenTag
ExpressionBlockToken -> String
"{{"
TokenTag
CommentBlockToken -> String
"{{!"
TokenTag
AltBlockToken -> String
"{{#"
TokenTag
ChromeBlockToken -> String
"{{@"
TokenTag
CloseBlockToken -> String
"}}"
TokenTag
OpenParenToken -> String
"("
TokenTag
CloseParenToken -> String
")"
TokenTag
OpenBraceToken -> String
"{"
TokenTag
CloseBraceToken -> String
"}"
TokenTag
OpenBracketToken -> String
"["
TokenTag
CloseBracketToken -> String
"]"
TokenTag
PipeToken -> String
"|"
TokenTag
CommaToken -> String
","
TokenTag
DotToken -> String
"."
TokenTag
ColonToken -> String
":"
TokenTag
EndToken -> String
"end"
TokenTag
ElseToken -> String
"else"
TokenTag
TurnOffToken -> String
"{{*"
tokenTagParser :: TokenTag -> Lexer String
tokenTagParser :: TokenTag -> ParsecT String ParserState Identity String
tokenTagParser TokenTag
tag = forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string (TokenTag -> String
tokenTagValue TokenTag
tag) forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> forall a. Show a => a -> String
show TokenTag
tag
trimmingTokenTagValue :: TokenTag -> String
trimmingTokenTagValue :: TokenTag -> String
trimmingTokenTagValue = \case
TokenTag
ExpressionBlockToken -> String
"{{-"
TokenTag
CommentBlockToken -> String
"{{-!"
TokenTag
AltBlockToken -> String
"{{-#"
TokenTag
ChromeBlockToken -> String
"{{-@"
TokenTag
CloseBlockToken -> String
"-}}"
TokenTag
TurnOffToken -> String
"{{-*"
TokenTag
t -> TokenTag -> String
tokenTagValue TokenTag
t
trimmingTokenTagParser :: TokenTag -> Lexer String
trimmingTokenTagParser :: TokenTag -> ParsecT String ParserState Identity String
trimmingTokenTagParser TokenTag
tag = forall s (m :: * -> *) u.
Stream s m Char =>
String -> ParsecT s u m String
string (TokenTag -> String
trimmingTokenTagValue TokenTag
tag) forall t s (m :: * -> *) a.
(Show t, Stream s m t) =>
ParsecT s ParserState m a -> String -> ParsecT s ParserState m a
<?> TokenTag -> String
showTrimmingTokenTag TokenTag
tag
showTrimmingTokenTag :: TokenTag -> String
showTrimmingTokenTag :: TokenTag -> String
showTrimmingTokenTag TokenTag
t = TokenTag -> String
tokenTagName TokenTag
t forall a. [a] -> [a] -> [a]
++ String
" " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show (TokenTag -> String
trimmingTokenTagValue TokenTag
t)
open :: Lexer String
open :: ParsecT String ParserState Identity String
open = TokenTag -> ParsecT String ParserState Identity String
tokenTagParser TokenTag
ExpressionBlockToken
close :: Lexer String
close :: ParsecT String ParserState Identity String
close = TokenTag -> ParsecT String ParserState Identity String
tokenTagParser TokenTag
CloseBlockToken
trimmingOpen :: Lexer String
trimmingOpen :: ParsecT String ParserState Identity String
trimmingOpen = TokenTag -> ParsecT String ParserState Identity String
trimmingTokenTagParser TokenTag
ExpressionBlockToken
trimmingClose :: Lexer String
trimmingClose :: ParsecT String ParserState Identity String
trimmingClose = TokenTag -> ParsecT String ParserState Identity String
trimmingTokenTagParser TokenTag
CloseBlockToken
openBrace :: Lexer String
openBrace :: ParsecT String ParserState Identity String
openBrace = TokenTag -> ParsecT String ParserState Identity String
tokenTagParser TokenTag
OpenBraceToken
closeBrace :: Lexer String
closeBrace :: ParsecT String ParserState Identity String
closeBrace = TokenTag -> ParsecT String ParserState Identity String
tokenTagParser TokenTag
CloseBraceToken
instance Show TokenTag where
show :: TokenTag -> String
show TokenTag
t = TokenTag -> String
tokenTagName TokenTag
t forall a. [a] -> [a] -> [a]
++ String
" " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show (TokenTag -> String
tokenTagValue TokenTag
t)