@@ -223,25 +223,21 @@ block = choice [ header
223header = setextHeader <|> atxHeader <?> "header"
223header = setextHeader <|> atxHeader <?> "header"
225atxHeader = try $ do
225atxHeader = try $ do
226− lead <- many1 (char '#')
226+ level <- many1 (char '#') >>= return . length
227 notFollowedBy (char '.' <|> char ')') -- this would be a list
227 notFollowedBy (char '.' <|> char ')') -- this would be a list
228 skipSpaces
228 skipSpaces
229− txt <- manyTill inline atxClosing
229+ text <- manyTill inline atxClosing >>= return . normalizeSpaces
230− return $ Header (length lead) (normalizeSpaces txt)
230+ return $ Header level text
232−atxClosing = try $ skipMany (char '#') >> skipSpaces >> newline >>
232+atxClosing = try $ skipMany (char '#') >> blanklines
233− option "" blanklines
235−setextHeader = choice $
236− map (\x -> setextH x) $ enumFromTo 1 (length setextHChars)
234+setextHeader = choice $ map setextH $ enumFromTo 1 (length setextHChars)
238−setextH n = try $ do
236+setextH level = try $ do
239− txt <- many1Till inline newline
237+ text <- many1Till inline newline >>= return . normalizeSpaces
240− many1 (char (setextHChars !! (n-1)))
238+ many1 $ char (setextHChars !! (level - 1))
243− optional blanklines
239+ blanklines
244− return $ Header n (normalizeSpaces txt)
240+ return $ Header level text
247-- hrule block
243-- hrule block
@@ -260,20 +256,15 @@ hrule = choice (map hruleWith hruleChars) <?> "hrule"
260-- code blocks
256-- code blocks
263−indentedLine = try $ do
265− result <- manyTill anyChar newline
259+indentedLine = indentSpaces >> manyTill anyChar newline >>= return . (++ "\n")
266− return $ result ++ "\n"
268−-- two or more indented lines, possibly separated by blank lines
261+codeBlock = try $ do
269−indentedBlock = try $ do
262+ contents <- many1 (indentedLine <|>
270− res1 <- indentedLine
263+ try (do b <- blanklines
271− blanks <- many blankline
264+ l <- indentedLine
272− res2 <- indentedBlock <|> indentedLine
265+ return $ b ++ l))
273− return $ res1 ++ blanks ++ res2
266+ blanklines
275−codeBlock = (indentedBlock <|> indentedLine) >>~ optional blanklines >>=
276− return . CodeBlock . stripTrailingNewlines
267+ return $ CodeBlock $ stripTrailingNewlines $ concat contents
279-- block quotes
270-- block quotes