diff --git a/src/Lexer.hs b/src/Lexer.hs index b9b7c9b..1f921bd 100644 --- a/src/Lexer.hs +++ b/src/Lexer.hs @@ -11,6 +11,7 @@ import Data.Char (isAlphaNum, isPrint) import Data.Functor (($>)) import Data.Text (Text) import Data.Text qualified as Text +import Debug.Trace (traceM) import GHC.Stack (HasCallStack) import ParserMonad (Parser, initialParserState) import Text.Parsec @@ -94,12 +95,16 @@ textElement = delimitedMaybe :: Parser a -> Parser a -> Token -> Maybe Token -> Parser [LocatedToken] delimitedMaybe op cl ot ct = do - pos <- getPosition - (text, content) <- match $ between op cl any' - let openTok :: LocatedToken = (setSourceColumn pos 1, ot) - res :: LocatedToken = (setSourceColumn pos 2, Token content) + openPos <- getPosition + void op -- opening + tokenPos <- getPosition + content <- any' + closePos <- getPosition + void cl + let openTok :: LocatedToken = (openPos, ot) + res :: LocatedToken = (tokenPos, Token content) closeToks :: [LocatedToken] = case ct of - Just close -> [(setSourceColumn pos (Text.length text), close)] + Just close -> [(closePos, close)] Nothing -> [] pure $ [openTok, res] <> closeToks diff --git a/test/Spec.hs b/test/Spec.hs index 270cbf4..2475a51 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -41,13 +41,13 @@ maths :: IO () maths = do "\\[some math\\]" `shouldLexTo` [ (1, 1, MathsBracketOpen) - , (1, 2, Token "some math") - , (1, 13, MathsBracketClose) + , (1, 3, Token "some math") + , (1, 12, MathsBracketClose) ] "\\(other maths\\)" `shouldLexTo` [ (1, 1, MathsParenOpen) - , (1, 2, Token "other maths") - , (1, 15, MathsParenClose) + , (1, 3, Token "other maths") + , (1, 14, MathsParenClose) ] escaping :: Expectation @@ -74,7 +74,7 @@ birdTracks :: Expectation birdTracks = ">> code" `shouldLexTo` [ (1, 1, BirdTrack) - , (1, 2, Token "code") + , (1, 4, Token "code") ] quotes :: Expectation