Added expression eval; adjusted birdtrack, added sol combinator.
This commit is contained in:
parent
449b7c8ca7
commit
f9423d4af0
2 changed files with 52 additions and 8 deletions
22
src/Lexer.hs
22
src/Lexer.hs
|
|
@ -42,6 +42,7 @@ data Token
|
|||
| Escape
|
||||
| EmphasisOpen
|
||||
| EmphasisClose
|
||||
| Expression
|
||||
| Header Level
|
||||
| MonospaceOpen
|
||||
| MonospaceClose
|
||||
|
|
@ -101,6 +102,7 @@ lexText = go
|
|||
|
||||
, try module_
|
||||
, quotes
|
||||
, try expression
|
||||
, birdTrack
|
||||
|
||||
-- starts with "\"
|
||||
|
|
@ -158,16 +160,26 @@ delimited openP closeP openTok closeTok = asList <$> delimitedAsTuple (openTok <
|
|||
asList (a, tok, b) = [a, tok, b]
|
||||
|
||||
delimitedNoTrailing :: Parser open -> Parser close -> Token -> Parser [LocatedToken]
|
||||
delimitedNoTrailing openP closeP openTok = asList <$> delimitedAsTuple (openTok <$ openP) (void closeP)
|
||||
delimitedNoTrailing openP closeP openTok =
|
||||
asList <$> delimitedAsTuple (openTok <$ openP) (void closeP)
|
||||
where
|
||||
asList (a, tok, _) = [a, tok]
|
||||
|
||||
delimitedSymmetric :: Parser a -> Token -> Token -> Parser [LocatedToken]
|
||||
delimitedSymmetric s = delimited s s
|
||||
|
||||
--- End of line // end of file
|
||||
eol :: Parser ()
|
||||
eol = void "\n" <|> void "\r\n" <|> Parsec.eof
|
||||
|
||||
-- Start of line // start of file
|
||||
sol :: Parser ()
|
||||
sol = do
|
||||
p <- getPosition
|
||||
if sourceColumn p == 1
|
||||
then pure ()
|
||||
else fail "Not at start of line/document"
|
||||
|
||||
header1 :: Lexer
|
||||
header1 = delimitedNoTrailing "= " eol (Header One)
|
||||
|
||||
|
|
@ -256,7 +268,13 @@ mathInline = delimited "\\(" "\\)" MathInlineOpen MathInlineClose
|
|||
|
||||
-- TODO: make sure this starts at column 0?
|
||||
birdTrack :: Lexer
|
||||
birdTrack = delimitedNoTrailing ">> " eol BirdTrack
|
||||
birdTrack = delimitedNoTrailing (sol <* "> ") eol BirdTrack
|
||||
|
||||
-- TODO: also match following lines iff:
|
||||
-- they start with alphanum
|
||||
-- they're not empty
|
||||
expression :: Lexer
|
||||
expression = delimitedNoTrailing (sol <* ">>> ") eol Expression
|
||||
|
||||
escape :: Lexer
|
||||
escape = delimitedNoTrailing "\\" eol Escape
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue