@@ -147,6 +147,9 @@ lchop s = s
147147rchop :: String -> String
148148rchop = reverse . lchop . reverse
149149
150+unindent :: String -> String
151+unindent = rchop . intercalate "\n" . dropSpacePrefix . splitOn "\n" . lchop
152+
150153dropSpacePrefix :: [String] -> [String]
151154dropSpacePrefix lns =
152155 map (drop maxIndent) lns
@@ -380,15 +383,15 @@ amuseHeadingUntil end = try $ do
380383example :: PandocMonad m => MuseParser m (F Blocks)
381384example = try $ pure . B.codeBlock
382385 <$ string "{{{"
383− <* optional blankline
384− <*> manyTill anyChar (try (optional blankline *> string "}}}"))
386+ <* many spaceChar
387+ <*> (unindent <$> manyTill anyChar (string "}}}"))
385388
386389-- | Parse an @\<example>@ tag.
387390exampleTag :: PandocMonad m => MuseParser m (F Blocks)
388391exampleTag = try $ fmap pure $ B.codeBlockWith
389392 <$ many spaceChar
390393 <*> (htmlAttrToPandoc <$> openTag "example")
391− <*> (rchop . intercalate "\n" . dropSpacePrefix . splitOn "\n" . lchop <$> manyTill anyChar (closeTag "example"))
394+ <*> (unindent <$> manyTill anyChar (closeTag "example"))
392395 <* manyTill spaceChar eol
393396
394397-- | Parse a @\<literal>@ tag as a raw block.
@@ -398,7 +401,7 @@ literalTag = try $ fmap pure $ B.rawBlock
398401 <$ many spaceChar
399402 <*> (fromMaybe "html" . lookup "style" <$> openTag "literal") -- FIXME: Emacs Muse inserts <literal> without style into all output formats, but we assume HTML
400403 <* manyTill spaceChar eol
401− <*> (rchop . intercalate "\n" . dropSpacePrefix . splitOn "\n" . lchop <$> manyTill anyChar (closeTag "literal"))
404+ <*> (unindent <$> manyTill anyChar (closeTag "literal"))
402405 <* manyTill spaceChar eol
403406
404407-- | Parse @\<center>@ tag.