@@ -285,7 +285,7 @@ note = try (do
285285 ref <- noteMarker
286286 char ':'
287287 skipSpaces
288− skipEndline
288+ skipEndline
289289 raw <- sepBy rawLines (try (do {blankline; indentSpaces}))
290290 option "" blanklines
291291 -- parse the extracted text, which may contain various block elements:
@@ -510,7 +510,7 @@ referenceKey = try (do
510510 blanklines
511511 state <- getState
512512 let keysUsed = stateKeysUsed state
513− updateState (\st -> st { stateKeysUsed = (label:keysUsed) })
513+ setState state { stateKeysUsed = (label:keysUsed) }
514514 return $ Key label (Src (removeTrailingSpace src) tit))
515515
516516--
@@ -652,7 +652,6 @@ emDash = try (do
652652 skipSpaces
653653 oneOfStrings ["---", "--"]
654654 skipSpaces
655− option ' ' newline
656655 return EmDash)
657656
658657whitespace = do
@@ -684,7 +683,9 @@ endline = try (do
684683 if stateStrict st
685684 then do
686685 notFollowedBy' emailBlockQuoteStart
687− notFollowedBy' header
686+ notFollowedBy (char atxHChar) -- atx header
687+ notFollowedBy (try (do{manyTill anyChar newline;
688+ oneOf setextHChars})) -- setext header
688689 else return ()
689690 -- parse potential list-starts differently if in a list:
690691 if (stateParserContext st) == ListItemState
@@ -705,7 +706,6 @@ rawLabel = try $ do
705706
706707-- a reference label for a link
707708reference = try $ do
708− notFollowedBy (try (do{char labelStart; char noteStart}))
709709 raw <- rawLabel
710710 oldInput <- getInput
711711 setInput raw
@@ -726,13 +726,13 @@ source = try (do
726726
727727titleWith startChar endChar = try (do
728728 skipSpaces
729− skipEndline -- a title can be on the next line from the source
729+ option ' ' newline -- a title can be on the next line from the source
730730 skipSpaces
731731 char startChar
732732 tit <- manyTill anyChar (try (do
733733 char endChar
734734 skipSpaces
735− followedBy' (char ')' <|> newline)))
735+ notFollowedBy (noneOf ")\n")))
736736 let tit' = gsub "\"" """ tit
737737 return tit')
738738
@@ -753,13 +753,14 @@ referenceLink = choice [referenceLinkDouble, referenceLinkSingle]
753753referenceLinkDouble = try (do
754754 label <- reference
755755 skipSpaces
756− skipEndline
756+ option ' ' newline
757757 skipSpaces
758758 ref <- reference
759759 let ref' = if null ref then label else ref
760760 state <- getState
761761 if ref' `elem` (stateKeysUsed state)
762− then return () else fail "no corresponding key"
762+ then return ()
763+ else fail "no corresponding key"
763764 return (Link label (Ref ref')))
764765
765766-- a link like [this]
@@ -767,12 +768,13 @@ referenceLinkSingle = try (do
767768 label <- reference
768769 state <- getState
769770 if label `elem` (stateKeysUsed state)
770− then return () else fail "no corresponding key"
771+ then return ()
772+ else fail "no corresponding key"
771773 return (Link label (Ref label)))
772774
773775-- a link <like.this.com>
774776autoLink = try (do
775− notFollowedBy' anyHtmlBlockTag
777+ notFollowedBy' (anyHtmlTag <|> anyHtmlEndTag)
776778 src <- between (char autoLinkStart) (char autoLinkEnd)
777779 (many (noneOf (spaceChars ++ endLineChars ++ [autoLinkEnd])))
778780 case (matchRegex emailAddress src) of
@@ -797,7 +799,7 @@ noteRef = try (do
797799 ref <- noteMarker
798800 state <- getState
799801 let identifiers = (stateNoteIdentifiers state) ++ [ref]
800− updateState (\st -> st {stateNoteIdentifiers = identifiers})
802+ setState state {stateNoteIdentifiers = identifiers}
801803 return (NoteRef (show (length identifiers))))
802804
803805inlineNote = try (do
@@ -809,9 +811,9 @@ inlineNote = try (do
809811 let identifiers = stateNoteIdentifiers state
810812 let ref = show $ (length identifiers) + 1
811813 let noteBlocks = stateNoteBlocks state
812− updateState (\st -> st {stateNoteIdentifiers = (identifiers ++ [ref]),
813− stateNoteBlocks =
814− (Note ref [Para contents]):noteBlocks})
814+ setState state {stateNoteIdentifiers = (identifiers ++ [ref]),
815+ stateNoteBlocks =
816+ (Note ref [Para contents]):noteBlocks}
815817 return (NoteRef ref))
816818
817819rawLaTeXInline' = do