@@ -285,7 +285,7 @@ note = try (do
285 ref <- noteMarker
285 ref <- noteMarker
287 skipSpaces
287 skipSpaces
288− skipEndline
288+ skipEndline
289 raw <- sepBy rawLines (try (do {blankline; indentSpaces}))
289 raw <- sepBy rawLines (try (do {blankline; indentSpaces}))
290 option "" blanklines
290 option "" blanklines
291 -- parse the extracted text, which may contain various block elements:
291 -- parse the extracted text, which may contain various block elements:
@@ -510,7 +510,7 @@ referenceKey = try (do
510 blanklines
510 blanklines
511 state <- getState
511 state <- getState
512 let keysUsed = stateKeysUsed state
512 let keysUsed = stateKeysUsed state
513− updateState (\st -> st { stateKeysUsed = (label:keysUsed) })
513+ setState state { stateKeysUsed = (label:keysUsed) }
514 return $ Key label (Src (removeTrailingSpace src) tit))
514 return $ Key label (Src (removeTrailingSpace src) tit))
@@ -652,7 +652,6 @@ emDash = try (do
652 skipSpaces
652 skipSpaces
653 oneOfStrings ["---", "--"]
653 oneOfStrings ["---", "--"]
654 skipSpaces
654 skipSpaces
656 return EmDash)
655 return EmDash)
658whitespace = do
657whitespace = do
@@ -684,7 +683,9 @@ endline = try (do
684 if stateStrict st
683 if stateStrict st
686 notFollowedBy' emailBlockQuoteStart
685 notFollowedBy' emailBlockQuoteStart
687− notFollowedBy' header
686+ notFollowedBy (char atxHChar) -- atx header
687+ notFollowedBy (try (do{manyTill anyChar newline;
688+ oneOf setextHChars})) -- setext header
688 else return ()
689 else return ()
689 -- parse potential list-starts differently if in a list:
690 -- parse potential list-starts differently if in a list:
690 if (stateParserContext st) == ListItemState
691 if (stateParserContext st) == ListItemState
@@ -705,7 +706,6 @@ rawLabel = try $ do
706-- a reference label for a link
707-- a reference label for a link
707reference = try $ do
708reference = try $ do
708− notFollowedBy (try (do{char labelStart; char noteStart}))
709 raw <- rawLabel
709 raw <- rawLabel
710 oldInput <- getInput
710 oldInput <- getInput
711 setInput raw
711 setInput raw
@@ -726,13 +726,13 @@ source = try (do
727titleWith startChar endChar = try (do
727titleWith startChar endChar = try (do
728 skipSpaces
728 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
730 skipSpaces
730 skipSpaces
731 char startChar
731 char startChar
732 tit <- manyTill anyChar (try (do
732 tit <- manyTill anyChar (try (do
733 char endChar
733 char endChar
734 skipSpaces
734 skipSpaces
735− followedBy' (char ')' <|> newline)))
735+ notFollowedBy (noneOf ")\n")))
736 let tit' = gsub "\"" """ tit
736 let tit' = gsub "\"" """ tit
737 return tit')
737 return tit')
@@ -753,13 +753,14 @@ referenceLink = choice [referenceLinkDouble, referenceLinkSingle]
753referenceLinkDouble = try (do
753referenceLinkDouble = try (do
754 label <- reference
754 label <- reference
755 skipSpaces
755 skipSpaces
756− skipEndline
756+ option ' ' newline
757 skipSpaces
757 skipSpaces
758 ref <- reference
758 ref <- reference
759 let ref' = if null ref then label else ref
759 let ref' = if null ref then label else ref
760 state <- getState
760 state <- getState
761 if ref' `elem` (stateKeysUsed state)
761 if ref' `elem` (stateKeysUsed state)
762− then return () else fail "no corresponding key"
763+ else fail "no corresponding key"
763 return (Link label (Ref ref')))
764 return (Link label (Ref ref')))
765-- a link like [this]
766-- a link like [this]
@@ -767,12 +768,13 @@ referenceLinkSingle = try (do
767 label <- reference
768 label <- reference
768 state <- getState
769 state <- getState
769 if label `elem` (stateKeysUsed state)
770 if label `elem` (stateKeysUsed state)
770− then return () else fail "no corresponding key"
772+ else fail "no corresponding key"
771 return (Link label (Ref label)))
773 return (Link label (Ref label)))
773-- a link <like.this.com>
775-- a link <like.this.com>
774autoLink = try (do
776autoLink = try (do
775− notFollowedBy' anyHtmlBlockTag
777+ notFollowedBy' (anyHtmlTag <|> anyHtmlEndTag)
776 src <- between (char autoLinkStart) (char autoLinkEnd)
778 src <- between (char autoLinkStart) (char autoLinkEnd)
777 (many (noneOf (spaceChars ++ endLineChars ++ [autoLinkEnd])))
779 (many (noneOf (spaceChars ++ endLineChars ++ [autoLinkEnd])))
778 case (matchRegex emailAddress src) of
780 case (matchRegex emailAddress src) of
@@ -797,7 +799,7 @@ noteRef = try (do
797 ref <- noteMarker
799 ref <- noteMarker
798 state <- getState
800 state <- getState
799 let identifiers = (stateNoteIdentifiers state) ++ [ref]
801 let identifiers = (stateNoteIdentifiers state) ++ [ref]
800− updateState (\st -> st {stateNoteIdentifiers = identifiers})
802+ setState state {stateNoteIdentifiers = identifiers}
801 return (NoteRef (show (length identifiers))))
803 return (NoteRef (show (length identifiers))))
803inlineNote = try (do
805inlineNote = try (do
@@ -809,9 +811,9 @@ inlineNote = try (do
809 let identifiers = stateNoteIdentifiers state
811 let identifiers = stateNoteIdentifiers state
810 let ref = show $ (length identifiers) + 1
812 let ref = show $ (length identifiers) + 1
811 let noteBlocks = stateNoteBlocks state
813 let noteBlocks = stateNoteBlocks state
812− updateState (\st -> st {stateNoteIdentifiers = (identifiers ++ [ref]),
814+ setState state {stateNoteIdentifiers = (identifiers ++ [ref]),
813− stateNoteBlocks =
815+ stateNoteBlocks =
814− (Note ref [Para contents]):noteBlocks})
816+ (Note ref [Para contents]):noteBlocks}
815 return (NoteRef ref))
817 return (NoteRef ref))
817rawLaTeXInline' = do
819rawLaTeXInline' = do