@@ -662,6 +662,11 @@ bracketed parser = try $ do
662 symbol '['
662 symbol '['
663 mconcat <$> manyTill parser (symbol ']')
663 mconcat <$> manyTill parser (symbol ']')
665+parenWrapped :: PandocMonad m => Monoid a => LP m a -> LP m a
666+parenWrapped parser = try $ do
668+ mconcat <$> manyTill parser (symbol ')')
665dimenarg :: PandocMonad m => LP m Text
670dimenarg :: PandocMonad m => LP m Text
666dimenarg = try $ do
671dimenarg = try $ do
667 ch <- option False $ True <$ symbol '='
672 ch <- option False $ True <$ symbol '='
@@ -1470,7 +1475,21 @@ citationLabel = do
1470cites :: PandocMonad m => CitationMode -> Bool -> LP m [Citation]
1475cites :: PandocMonad m => CitationMode -> Bool -> LP m [Citation]
1471cites mode multi = try $ do
1476cites mode multi = try $ do
1472 cits <- if multi
1477 cits <- if multi
1479+ multiprenote <- optionMaybe $ toList <$> paropt
1480+ multipostnote <- optionMaybe $ toList <$> paropt
1481+ let (pre, suf) = case (multiprenote, multipostnote) of
1482+ (Just s , Nothing) -> (mempty, s)
1483+ (Nothing , Just t) -> (mempty, t)
1484+ (Just s , Just t ) -> (s, t)
1485+ _ -> (mempty, mempty)
1473− then many1 simpleCiteArgs
1486+ tempCits <- many1 simpleCiteArgs
1488+ (k:ks) -> case ks of
1489+ (_:_) -> return $ ((addMprenote pre k):init ks) ++
1490+ [addMpostnote suf (last ks)]
1491+ _ -> return [addMprenote pre (addMpostnote suf k)]
1474 else count 1 simpleCiteArgs
1493 else count 1 simpleCiteArgs
1475 let cs = concat cits
1494 let cs = concat cits
1476 return $ case mode of
1495 return $ case mode of
@@ -1478,6 +1497,17 @@ cites mode multi = try $ do
1478 (c:rest) -> c {citationMode = mode} : rest
1497 (c:rest) -> c {citationMode = mode} : rest
1479 [] -> []
1498 [] -> []
1480 _ -> map (\a -> a {citationMode = mode}) cs
1499 _ -> map (\a -> a {citationMode = mode}) cs
1500+ where mprenote (k:ks) = (k:ks) ++ [Space]
1501+ mprenote _ = mempty
1502+ mpostnote (k:ks) = [Str ",", Space] ++ (k:ks)
1503+ mpostnote _ = mempty
1504+ addMprenote mpn (k:ks) =
1505+ let mpnfinal = case citationPrefix k of
1506+ (_:_) -> mprenote mpn
1508+ in addPrefix mpnfinal (k:ks)
1509+ addMprenote _ _ = []
1510+ addMpostnote = addSuffix . mpostnote
1482citation :: PandocMonad m => String -> CitationMode -> Bool -> LP m Inlines
1512citation :: PandocMonad m => String -> CitationMode -> Bool -> LP m Inlines
1483citation name mode multi = do
1513citation name mode multi = do
@@ -1548,6 +1578,9 @@ singleChar = try $ do
1548opt :: PandocMonad m => LP m Inlines
1578opt :: PandocMonad m => LP m Inlines
1549opt = bracketed inline <|> (str . T.unpack <$> rawopt)
1579opt = bracketed inline <|> (str . T.unpack <$> rawopt)
1581+paropt :: PandocMonad m => LP m Inlines
1582+paropt = parenWrapped inline
1551rawopt :: PandocMonad m => LP m Text
1584rawopt :: PandocMonad m => LP m Text
1552rawopt = do
1585rawopt = do
1553 inner <- untokenize <$> bracketedToks
1586 inner <- untokenize <$> bracketedToks