summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Krotov <ilabdsf@gmail.com>2017-09-28 14:47:07 +0300
committerAlexander Krotov <ilabdsf@gmail.com>2017-09-28 14:57:24 +0300
commitb5d064e8f08db27f3f9aa7287edd7a777be57594 (patch)
treee91e88a655080dca89fa9c471df2111eba061173
parente38c0230074e9224638462cdc8a79b9992467392 (diff)
Muse reader: parse anchors
-rw-r--r--src/Text/Pandoc/Readers/Muse.hs12
-rw-r--r--test/Tests/Readers/Muse.hs20
2 files changed, 31 insertions, 1 deletions
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 <biblio>
- <play> 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]."