git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: add openTag and closeTag functions
commit1feb62cb24a8fda5ce8ea823ec102abc0bd6e2ec authorAlexander Krotov <ilabdsf@gmail.com> dateWed 19 Sep 2018, 13:22 (8 years ago) parent6632f2f
1 file changed+19−18
src/Text/Pandoc/Readers/Muse.hs+19−18
src/Text/Pandoc/Readers/Muse.hs+19−18
@@ -179,16 +179,22 @@ someUntil p end = first <$> ((:) <$> p) <*> manyUntil p end
179179
180180-- ** HTML parsers
181181
182+openTag :: PandocMonad m => String -> MuseParser m Attr
183+openTag tag = do
184+ (TagOpen _ attr, _) <- htmlTag(~== TagOpen tag [])
185+ return $ htmlAttrToPandoc attr
186+
187+closeTag :: PandocMonad m => String -> MuseParser m ()
188+closeTag tag = void $ htmlTag (~== TagClose tag)
189+
182190-- | Parse HTML tag, returning its attributes and literal contents.
183191htmlElement :: PandocMonad m
184192 => String -- ^ Tag name
185193 -> MuseParser m (Attr, String)
186194htmlElement tag = try $ do
187− (TagOpen _ attr, _) <- htmlTag (~== TagOpen tag [])
188− content <- manyTill anyChar endtag
189− return (htmlAttrToPandoc attr, content)
190− where
191− endtag = void $ htmlTag (~== TagClose tag)
195+ attr <- openTag tag
196+ content <- manyTill anyChar $ closeTag tag
197+ return (attr, content)
192198
193199htmlBlock :: PandocMonad m
194200 => String -- ^ Tag name
@@ -213,13 +219,11 @@ parseHtmlContent :: PandocMonad m
213219parseHtmlContent tag = try $ do
214220 many spaceChar
215221 pos <- getPosition
216− (TagOpen _ attr, _) <- htmlTag (~== TagOpen tag [])
222+ attr <- openTag tag
217223 manyTill spaceChar eol
218− content <- parseBlocksTill $ try $ count (sourceColumn pos - 1) spaceChar >> endtag
224+ content <- parseBlocksTill $ try $ count (sourceColumn pos - 1) spaceChar >> closeTag tag
219225 manyTill spaceChar eol -- closing tag must be followed by optional whitespace and newline
220− return (htmlAttrToPandoc attr, content)
221− where
222− endtag = void $ htmlTag (~== TagClose tag)
226+ return (attr, content)
223227
224228-- ** Directive parsers
225229
@@ -423,13 +427,12 @@ exampleTag = try $ do
423427literalTag :: PandocMonad m => MuseParser m (F Blocks)
424428literalTag = try $ do
425429 many spaceChar
426− (TagOpen _ attr, _) <- htmlTag (~== TagOpen "literal" [])
430+ attr <- openTag "literal"
427431 manyTill spaceChar eol
428− content <- manyTill anyChar endtag
432+ content <- manyTill anyChar $ closeTag "literal"
429433 manyTill spaceChar eol
430− return $ return $ rawBlock (htmlAttrToPandoc attr, content)
434+ return $ return $ rawBlock (attr, content)
431435 where
432− endtag = void $ htmlTag (~== TagClose "literal")
433436 -- FIXME: Emacs Muse inserts <literal> without style into all output formats, but we assume HTML
434437 format (_, _, kvs) = fromMaybe "html" $ lookup "style" kvs
435438 rawBlock (attrs, content) = B.rawBlock (format attrs) $ rchop $ intercalate "\n" $ dropSpacePrefix $ splitOn "\n" $ lchop content
@@ -480,14 +483,12 @@ verseTag :: PandocMonad m => MuseParser m (F Blocks)
480483verseTag = try $ do
481484 many spaceChar
482485 pos <- getPosition
483− (TagOpen _ _, _) <- htmlTag (~== TagOpen "verse" [])
486+ openTag "verse"
484487 manyTill spaceChar eol
485488 let indent = count (sourceColumn pos - 1) spaceChar
486− content <- sequence <$> manyTill (indent >> verseLine) (try $ indent >> endtag)
489+ content <- sequence <$> manyTill (indent >> verseLine) (try $ indent >> closeTag "verse")
487490 manyTill spaceChar eol
488491 return $ B.lineBlock <$> content
489− where
490− endtag = void $ htmlTag (~== TagClose "verse")
491492
492493-- | Parse @\<comment>@ tag.
493494commentTag :: PandocMonad m => MuseParser m (F Blocks)