git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: simplify tag parsers
commit111e6ffa55e17b5e0399adac484a9510a80d3a3b authorAlexander Krotov <ilabdsf@gmail.com> dateFri 21 Sep 2018, 13:54 (8 years ago) parent3067e57
1 file changed+19−21
src/Text/Pandoc/Readers/Muse.hs+19−21
src/Text/Pandoc/Readers/Muse.hs+19−21
@@ -195,20 +195,6 @@ openTag tag = try $
195195closeTag :: PandocMonad m => String -> MuseParser m ()
196196closeTag tag = try $ string "</" *> string tag *> void (char '>')
197197
198−-- | Parse HTML tag, returning its attributes and literal contents.
199−htmlElement :: PandocMonad m
200− => String -- ^ Tag name
201− -> MuseParser m (Attr, String)
202−htmlElement tag = try $ (,)
203− <$> (htmlAttrToPandoc <$> openTag tag)
204− <*> manyTill anyChar (closeTag tag)
205−
206−htmlBlock :: PandocMonad m
207− => String -- ^ Tag name
208− -> MuseParser m (Attr, String)
209−htmlBlock tag = try $
210− many spaceChar *> htmlElement tag <* manyTill spaceChar eol
211−
212198-- | Convert HTML attributes to Pandoc 'Attr'
213199htmlAttrToPandoc :: [Attribute String] -> Attr
214200htmlAttrToPandoc attrs = (ident, classes, keyvals)
@@ -415,9 +401,11 @@ example = try $ pure . B.codeBlock
415401
416402-- | Parse an @\<example>@ tag.
417403exampleTag :: PandocMonad m => MuseParser m (F Blocks)
418−exampleTag = try $ do
419− (attr, contents) <- htmlBlock "example"
420− return $ return $ B.codeBlockWith attr $ rchop $ intercalate "\n" $ dropSpacePrefix $ splitOn "\n" $ lchop contents
404+exampleTag = try $ fmap pure $ B.codeBlockWith
405+ <$ many spaceChar
406+ <*> (htmlAttrToPandoc <$> openTag "example")
407+ <*> (rchop . intercalate "\n" . dropSpacePrefix . splitOn "\n" . lchop <$> manyTill anyChar (closeTag "example"))
408+ <* manyTill spaceChar eol
421409
422410-- | Parse a @\<literal>@ tag as a raw block.
423411-- For 'RawInline' @\<literal>@ parser, see 'inlineLiteralTag'.
@@ -484,7 +472,11 @@ verseTag = try $ do
484472
485473-- | Parse @\<comment>@ tag.
486474commentTag :: PandocMonad m => MuseParser m (F Blocks)
487−commentTag = mempty <$ htmlBlock "comment"
475+commentTag = try $ mempty
476+ <$ many spaceChar
477+ <* openTag "comment"
478+ <* manyTill anyChar (closeTag "comment")
479+ <* manyTill spaceChar eol
488480
489481-- | Parse paragraph contents.
490482paraContentsUntil :: PandocMonad m
@@ -892,7 +884,9 @@ strikeoutTag = fmap B.strikeout <$> inlineTag "del"
892884
893885-- | Parse @\<verbatim>@ tag.
894886verbatimTag :: PandocMonad m => MuseParser m (F Inlines)
895−verbatimTag = return . B.text . snd <$> htmlElement "verbatim"
887+verbatimTag = return . B.text
888+ <$ openTag "verbatim"
889+ <*> manyTill anyChar (closeTag "verbatim")
896890
897891-- | Parse @\<class>@ tag.
898892classTag :: PandocMonad m => MuseParser m (F Inlines)
@@ -918,12 +912,16 @@ code = try $ do
918912
919913-- | Parse @\<code>@ tag.
920914codeTag :: PandocMonad m => MuseParser m (F Inlines)
921−codeTag = return . uncurry B.codeWith <$> htmlElement "code"
915+codeTag = fmap pure $ B.codeWith
916+ <$> (htmlAttrToPandoc <$> openTag "code")
917+ <*> manyTill anyChar (closeTag "code")
922918
923919-- | Parse @\<math>@ tag.
924920-- @\<math>@ tag is an Emacs Muse extension enabled by @(require 'muse-latex2png)@
925921mathTag :: PandocMonad m => MuseParser m (F Inlines)
926−mathTag = return . B.math . snd <$> htmlElement "math"
922+mathTag = return . B.math
923+ <$ openTag "math"
924+ <*> manyTill anyChar (closeTag "math")
927925
928926-- | Parse inline @\<literal>@ tag as a raw inline.
929927inlineLiteralTag :: PandocMonad m => MuseParser m (F Inlines)