@@ -44,7 +44,7 @@ import Control.Applicative (many, optional, (<|>))
4444import Control.Monad
4545import Control.Monad.Except (throwError)
4646import Control.Monad.Trans (lift)
47−import Data.Char (chr, isAlphaNum, isLetter, ord, isDigit)
47+import Data.Char (chr, isAlphaNum, isLetter, ord, isDigit, toLower)
4848import Data.Default
4949import Data.Text (Text)
5050import qualified Data.Text as T
@@ -1445,8 +1445,36 @@ inlineCommands = M.fromList $
14451445 , ("toggletrue", braced >>= setToggle True)
14461446 , ("togglefalse", braced >>= setToggle False)
14471447 , ("iftoggle", try $ ifToggle >> inline)
1448+ -- biblatex misc
1449+ , ("RN", romanNumeralUpper)
1450+ , ("Rn", romanNumeralLower)
14481451 ]
14491452
1453+romanNumeralUpper :: (PandocMonad m) => LP m Inlines
1454+romanNumeralUpper =
1455+ str . toRomanNumeral <$> romanNumeralArg
1456+
1457+romanNumeralLower :: (PandocMonad m) => LP m Inlines
1458+romanNumeralLower =
1459+ str . map toLower . toRomanNumeral <$> romanNumeralArg
1460+
1461+romanNumeralArg :: (PandocMonad m) => LP m Int
1462+romanNumeralArg = spaces *> (parser <|> inBraces)
1463+ where
1464+ inBraces = do
1465+ symbol '{'
1466+ spaces
1467+ res <- parser
1468+ spaces
1469+ symbol '}'
1470+ return res
1471+ parser = do
1472+ Tok _ Word s <- satisfyTok isWordTok
1473+ let (digits, rest) = T.span isDigit s
1474+ unless (T.null rest) $
1475+ fail "Non-digits in argument to \\Rn or \\RN"
1476+ safeRead $ T.unpack digits
1477+
14501478newToggle :: (Monoid a, PandocMonad m) => [Tok] -> LP m a
14511479newToggle name = do
14521480 updateState $ \st ->