git.iko.soy/typeable/pandoc
on master help sign in
Muse reader: reduce duplication by introducing `getIndent`
7cfce58Alexander Krotov
src/Text/Pandoc/Readers/Muse.hs+7−9
@@ -548,6 +548,10 @@ lineBlock = try $ do
548
548
549-- *** List parsers
549-- *** List parsers
550
550
551+getIndent :: PandocMonad m
552+ => MuseParser m Int
553+getIndent = subtract 1 . sourceColumn <$ many spaceChar <*> getPosition
554+
551bulletListItemsUntil :: PandocMonad m
555bulletListItemsUntil :: PandocMonad m
552 => Int -- ^ Indentation
556 => Int -- ^ Indentation
553 -> MuseParser m a -- ^ Terminator parser
557 -> MuseParser m a -- ^ Terminator parser
@@ -564,9 +568,7 @@ bulletListUntil :: PandocMonad m
564 => MuseParser m a
568 => MuseParser m a
565 -> MuseParser m (F Blocks, a)
569 -> MuseParser m (F Blocks, a)
566bulletListUntil end = try $ do
570bulletListUntil end = try $ do
567− many spaceChar
571+ indent <- getIndent
568− pos <- getPosition
569− let indent = sourceColumn pos - 1
570 guard $ indent /= 0
572 guard $ indent /= 0
571 (items, e) <- bulletListItemsUntil indent end
573 (items, e) <- bulletListItemsUntil indent end
572 return (B.bulletList <$> sequence items, e)
574 return (B.bulletList <$> sequence items, e)
@@ -604,9 +606,7 @@ orderedListUntil :: PandocMonad m
604 => MuseParser m a
606 => MuseParser m a
605 -> MuseParser m (F Blocks, a)
607 -> MuseParser m (F Blocks, a)
606orderedListUntil end = try $ do
608orderedListUntil end = try $ do
607− many spaceChar
609+ indent <- getIndent
608− pos <- getPosition
609− let indent = sourceColumn pos - 1
610 guard $ indent /= 0
610 guard $ indent /= 0
611 (style, start) <- decimal <|> lowerRoman <|> upperRoman <|> lowerAlpha <|> upperAlpha
611 (style, start) <- decimal <|> lowerRoman <|> upperRoman <|> lowerAlpha <|> upperAlpha
612 char '.'
612 char '.'
@@ -642,9 +642,7 @@ definitionListUntil :: PandocMonad m
642 => MuseParser m a -- ^ Terminator parser
642 => MuseParser m a -- ^ Terminator parser
643 -> MuseParser m (F Blocks, a)
643 -> MuseParser m (F Blocks, a)
644definitionListUntil end = try $ do
644definitionListUntil end = try $ do
645− many spaceChar
645+ indent <- getIndent
646− pos <- getPosition
647− let indent = sourceColumn pos - 1
648 guardDisabled Ext_amuse <|> guard (indent /= 0) -- Initial space is required by Amusewiki, but not Emacs Muse
646 guardDisabled Ext_amuse <|> guard (indent /= 0) -- Initial space is required by Amusewiki, but not Emacs Muse
649 first (fmap B.definitionList . sequence) <$> definitionListItemsUntil indent end
647 first (fmap B.definitionList . sequence) <$> definitionListItemsUntil indent end
650
648