@@ -140,19 +140,39 @@ commonPrefix (x:xs) (y:ys)
140-- directive parsers
140-- directive parsers
143+-- While not documented, Emacs Muse allows "-" in directive name
143−parseDirective :: PandocMonad m => MuseParser m (String, F Inlines)
144+parseDirectiveKey :: PandocMonad m => MuseParser m (String)
144−parseDirective = do
145+parseDirectiveKey = do
146− key <- many letter
147+ many (letter <|> char '-')
149+parseEmacsDirective :: PandocMonad m => MuseParser m (String, F Inlines)
150+parseEmacsDirective = do
151+ key <- parseDirectiveKey
149 raw <- manyTill anyChar eol
154 raw <- manyTill anyChar eol
150 value <- parseFromString (trimInlinesF . mconcat <$> many inline) raw
155 value <- parseFromString (trimInlinesF . mconcat <$> many inline) raw
151 return (key, value)
156 return (key, value)
158+parseAmuseDirective :: PandocMonad m => MuseParser m (String, F Inlines)
159+parseAmuseDirective = do
160+ key <- parseDirectiveKey
163+ first <- manyTill anyChar eol
164+ rest <- manyTill anyLine endOfDirective
166+ value <- parseFromString (trimInlinesF . mconcat <$> many inline) $ unlines (first : rest)
169+ endOfDirective = lookAhead $ endOfInput <|> (try $ void blankline) <|> (try $ void parseDirectiveKey)
170+ endOfInput = try $ skipMany blankline >> skipSpaces >> eof
153directive :: PandocMonad m => MuseParser m ()
172directive :: PandocMonad m => MuseParser m ()
154directive = do
173directive = do
155− (key, value) <- parseDirective
174+ ext <- getOption readerExtensions
175+ (key, value) <- if extensionEnabled Ext_amuse ext then parseAmuseDirective else parseEmacsDirective
156 updateState $ \st -> st { stateMeta' = B.setMeta key <$> value <*> stateMeta' st }
176 updateState $ \st -> st { stateMeta' = B.setMeta key <$> value <*> stateMeta' st }