Working on parsing single newlines
This commit is contained in:
@@ -21,6 +21,7 @@ data MdToken
|
||||
| Header HeaderLevel MdToken
|
||||
| Para MdToken
|
||||
| Line [MdToken]
|
||||
| SingleNewline -- A single newline is rendered as a space.
|
||||
| Linebreak
|
||||
| HorizontalRule
|
||||
| Blockquote MdToken
|
||||
@@ -42,6 +43,7 @@ instance Show MdToken where
|
||||
show (Para token) = "<p>" ++ show token ++ "</p>"
|
||||
show (Line tokens) = concat (map show tokens)
|
||||
show Linebreak = "<br>"
|
||||
show SingleNewline = " "
|
||||
show HorizontalRule = "---------"
|
||||
show (Blockquote token) = "BLOCK" ++ show token
|
||||
show (UnordList tokens) = "UNORD" ++ concat (map show tokens)
|
||||
@@ -87,12 +89,11 @@ lineToList (Line tokens) = tokens
|
||||
parseHeader :: ReadP MdToken
|
||||
parseHeader = do
|
||||
skipSpaces
|
||||
headers <- many1 mustBeHash
|
||||
headers <- munch1 (== '#')
|
||||
when
|
||||
((length headers) > 6)
|
||||
pfail
|
||||
_ <- string " "
|
||||
-- text <- manyTill (get) ((string "\n") <|> (eof >> return ""))-- Parse until EOL or EOF
|
||||
skipSpaces
|
||||
text <- munch1 (/= '\n')
|
||||
Text.ParserCombinators.ReadP.optional (char '\n')
|
||||
let parsedText = fst $ leftmostLongestParse parseLine text
|
||||
@@ -128,6 +129,11 @@ parseLinebreak = do
|
||||
char '\n'
|
||||
return Linebreak
|
||||
|
||||
parseSingleNewline :: ReadP MdToken
|
||||
parseSingleNewline = do
|
||||
char '\n'
|
||||
return SingleNewline
|
||||
|
||||
-- Parse a regular string as a Unit.
|
||||
parseString :: ReadP MdToken
|
||||
parseString = do
|
||||
@@ -136,7 +142,7 @@ parseString = do
|
||||
return (Unit (firstChar : text))
|
||||
|
||||
lineParsers :: [ReadP MdToken]
|
||||
lineParsers = [parseLinebreak, parseBold, parseItalic, parseString] -- A 'line' doesn't include a 'header'
|
||||
lineParsers = [parseLinebreak, parseSingleNewline, parseBold, parseItalic, parseString] -- A 'line' doesn't include a 'header'
|
||||
|
||||
-- List of all parsers
|
||||
allParsers :: [ReadP MdToken]
|
||||
@@ -154,7 +160,6 @@ parseLine = do
|
||||
remaining <- look
|
||||
when (null remaining) pfail
|
||||
parsed <- parseMany parseLineToken
|
||||
-- traceM $ show parsed
|
||||
return (Line parsed)
|
||||
|
||||
-- Parse a paragraph, which is a 'Line' (can span multiple actual lines), separated by double-newlines.
|
||||
|
Reference in New Issue
Block a user