@@ -31,9 +31,10 @@ module Text.Pandoc.Readers.Markdown (
3131 readMarkdown
3232 ) where
3333
34−import Data.List ( transpose, isPrefixOf, isSuffixOf, lookup, sortBy )
34+import Data.List ( transpose, isPrefixOf, isSuffixOf, lookup, sortBy, findIndex )
3535import Data.Ord ( comparing )
3636import Data.Char ( isAlphaNum )
37+import Data.Maybe ( fromMaybe )
3738import Network.URI ( isURI )
3839import Text.Pandoc.Definition
3940import Text.Pandoc.Shared
@@ -276,13 +277,12 @@ atxHeader = try $ do
276277atxClosing = try $ skipMany (char '#') >> blanklines
277278
278279setextHeader = try $ do
279− -- first, see if this block has any chance of being a setextHeader:
280− lookAhead (anyLine >> oneOf setextHChars)
281− text <- many1Till inline newline >>= return . normalizeSpaces
282− level <- choice $ zipWith
283− (\ch lev -> try (many1 $ char ch) >> blanklines >> return lev)
284− setextHChars [1..(length setextHChars)]
285− return $ Header level text
280+ text <- many1Till inline newline
281+ underlineChar <- oneOf setextHChars
282+ many (char underlineChar)
283+ blanklines
284+ let level = (fromMaybe 0 $ findIndex (== underlineChar) setextHChars) + 1
285+ return $ Header level (normalizeSpaces text)
286286
287287--
288288-- hrule block