@@ -81,8 +81,6 @@ data MuseState = MuseState { museMeta :: F Meta -- ^ Document metadata
81 , museLastStrPos :: Maybe SourcePos -- ^ Position after last str parsed
81 , museLastStrPos :: Maybe SourcePos -- ^ Position after last str parsed
82 , museLogMessages :: [LogMessage]
82 , museLogMessages :: [LogMessage]
83 , museNotes :: M.Map String (SourcePos, F Blocks)
83 , museNotes :: M.Map String (SourcePos, F Blocks)
84− , museInQuote :: Bool
86 , museInLink :: Bool
84 , museInLink :: Bool
@@ -97,8 +95,6 @@ defaultMuseState = MuseState { museMeta = return nullMeta
97 , museLastStrPos = Nothing
95 , museLastStrPos = Nothing
98 , museLogMessages = []
96 , museLogMessages = []
99 , museNotes = M.empty
97 , museNotes = M.empty
100− , museInQuote = False
101− , museInList = False
102 , museInLink = False
98 , museInLink = False
@@ -256,11 +252,14 @@ parseBlocks =
256 try blockStart <|>
252 try blockStart <|>
257 try paraStart
253 try paraStart
259− blockStart = do first <- blockElements
255+ blockStart = do first <- header <|> blockElements <|> amuseNoteBlock <|> emacsNoteBlock
260 rest <- parseBlocks
256 rest <- parseBlocks
261 return $ first B.<> rest
257 return $ first B.<> rest
259+ indent <- length <$> many spaceChar
262− paraStart = do (first, rest) <- paraUntil ((mempty <$ eof) <|> blockStart)
260+ (first, rest) <- paraUntil ((mempty <$ eof) <|> blockStart)
261+ let first' = if indent >= 2 && indent < 6 then B.blockQuote <$> first else first
263− return $ first B.<> rest
262+ return $ first' B.<> rest
265parseBlock :: PandocMonad m => MuseParser m (F Blocks)
264parseBlock :: PandocMonad m => MuseParser m (F Blocks)
266parseBlock = do
265parseBlock = do
@@ -273,7 +272,6 @@ blockElements :: PandocMonad m => MuseParser m (F Blocks)
273blockElements = choice [ mempty <$ blankline
272blockElements = choice [ mempty <$ blankline
274 , comment
273 , comment
275 , separator
274 , separator
277 , example
275 , example
278 , exampleTag
276 , exampleTag
279 , literalTag
277 , literalTag
@@ -288,8 +286,6 @@ blockElements = choice [ mempty <$ blankline
288 , definitionList
286 , definitionList
290 , commentTag
288 , commentTag
295comment :: PandocMonad m => MuseParser m (F Blocks)
291comment :: PandocMonad m => MuseParser m (F Blocks)
@@ -309,9 +305,7 @@ separator = try $ do
310header :: PandocMonad m => MuseParser m (F Blocks)
306header :: PandocMonad m => MuseParser m (F Blocks)
311header = try $ do
307header = try $ do
312− st <- museInList <$> getState
313− q <- museInQuote <$> getState
314− getPosition >>= \pos -> guard (not st && not q && sourceColumn pos == 1)
308+ getPosition >>= \pos -> guard (sourceColumn pos == 1)
315 level <- fmap length $ many1 $ char '*'
309 level <- fmap length $ many1 $ char '*'
316 guard $ level <= 5
310 guard $ level <= 5
317 spaceChar
311 spaceChar
@@ -370,13 +364,7 @@ rightTag :: PandocMonad m => MuseParser m (F Blocks)
370rightTag = snd <$> parseHtmlContent "right"
364rightTag = snd <$> parseHtmlContent "right"
372quoteTag :: PandocMonad m => MuseParser m (F Blocks)
366quoteTag :: PandocMonad m => MuseParser m (F Blocks)
373−quoteTag = do
367+quoteTag = (fmap B.blockQuote) <$> snd <$> parseHtmlContent "quote"
375− let oldInQuote = museInQuote st
376− setState $ st{ museInQuote = True }
377− res <- snd <$> parseHtmlContent "quote"
378− setState $ st{ museInQuote = oldInQuote }
379− return $ B.blockQuote <$> res
381-- <div> tag is supported by Emacs Muse, but not Amusewiki 2.025
369-- <div> tag is supported by Emacs Muse, but not Amusewiki 2.025
382divTag :: PandocMonad m => MuseParser m (F Blocks)
370divTag :: PandocMonad m => MuseParser m (F Blocks)
@@ -408,12 +396,8 @@ paraUntil :: PandocMonad m
408 => MuseParser m a
396 => MuseParser m a
409 -> MuseParser m (F Blocks, a)
397 -> MuseParser m (F Blocks, a)
410paraUntil end = do
398paraUntil end = do
411− indent <- length <$> many spaceChar
412− st <- museInList <$> getState
413− let f = if not st && indent >= 2 && indent < 6 then B.blockQuote else id
414 (l, e) <- someUntil inline $ try (manyTill spaceChar eol >> end)
399 (l, e) <- someUntil inline $ try (manyTill spaceChar eol >> end)
415− let p = fmap (f . B.para) $ trimInlinesF $ mconcat l
400+ return (fmap (B.para) $ trimInlinesF $ mconcat l, e)
418noteMarker :: PandocMonad m => MuseParser m String
402noteMarker :: PandocMonad m => MuseParser m String
419noteMarker = try $ do
403noteMarker = try $ do
@@ -481,18 +465,9 @@ lineBlock = try $ do
484−withListContext :: PandocMonad m => MuseParser m a -> MuseParser m a
485−withListContext p = do
487− let oldInList = museInList state
488− setState $ state { museInList = True }
490− updateState (\st -> st { museInList = oldInList })
493listItemContents' :: PandocMonad m => Int -> MuseParser m (F Blocks)
468listItemContents' :: PandocMonad m => Int -> MuseParser m (F Blocks)
494listItemContents' col =
469listItemContents' col =
495− mconcat <$> withListContext (parseBlock `sepBy1` try (skipMany blankline >> indentWith col))
470+ mconcat <$> parseBlock `sepBy1` try (skipMany blankline >> indentWith col)
497listItemContents :: PandocMonad m => MuseParser m (F Blocks)
472listItemContents :: PandocMonad m => MuseParser m (F Blocks)
498listItemContents = do
473listItemContents = do