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