From b5d064e8f08db27f3f9aa7287edd7a777be57594 Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Thu, 28 Sep 2017 14:47:07 +0300 Subject: Muse reader: parse anchors --- src/Text/Pandoc/Readers/Muse.hs | 12 +++++++++++- test/Tests/Readers/Muse.hs | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Text/Pandoc/Readers/Muse.hs b/src/Text/Pandoc/Readers/Muse.hs index 6e7844d4b..6f9b9b3c2 100644 --- a/src/Text/Pandoc/Readers/Muse.hs +++ b/src/Text/Pandoc/Readers/Muse.hs @@ -35,7 +35,6 @@ TODO: - Org tables - table.el tables - Images with attributes (floating and width) -- Anchors - Citations and - environment -} @@ -535,6 +534,7 @@ tableParseCaption = try $ do inline :: PandocMonad m => MuseParser m (F Inlines) inline = choice [ br + , anchor , footnote , strong , strongTag @@ -552,6 +552,16 @@ inline = choice [ br , symbol ] "inline" +anchor :: PandocMonad m => MuseParser m (F Inlines) +anchor = try $ do + getPosition >>= \pos -> guard (sourceColumn pos == 1) + char '#' + first <- letter + rest <- many (letter <|> digit) + skipMany spaceChar <|> void newline + let anchorId = first:rest + return $ return $ B.spanWith (anchorId, [], []) mempty + footnote :: PandocMonad m => MuseParser m (F Inlines) footnote = try $ do ref <- noteMarker diff --git a/test/Tests/Readers/Muse.hs b/test/Tests/Readers/Muse.hs index 3088f88b3..f89c58d3f 100644 --- a/test/Tests/Readers/Muse.hs +++ b/test/Tests/Readers/Muse.hs @@ -344,6 +344,26 @@ tests = ] =?> blockQuote (para "* Hi") ] + , testGroup "Anchors" + [ "Anchor" =: + T.unlines [ "; A comment to make sure anchor is not parsed as a directive" + , "#anchor Target" + ] =?> + para (spanWith ("anchor", [], []) mempty <> "Target") + , "Anchor cannot start with a number" =: + T.unlines [ "; A comment to make sure anchor is not parsed as a directive" + , "#0notanchor Target" + ] =?> + para "#0notanchor Target" + , "Not anchor if starts with a space" =: + " #notanchor Target" =?> + para "#notanchor Target" + , "Anchor inside a paragraph" =: + T.unlines [ "Paragraph starts here" + , "#anchor and ends here." + ] =?> + para ("Paragraph starts here " <> spanWith ("anchor", [], []) mempty <> "and ends here.") + ] , testGroup "Footnotes" [ "Simple footnote" =: T.unlines [ "Here is a footnote[1]." -- cgit v1.2.3