git.iko.soy/typeable/pandoc
on master help sign in
LaTeX reader: RN and Rn, from biblatex (#3854)
commitc80e26f888bcc5bd59192e40f5332da73767762f authorbucklereed <horridimpfoobarbaz@chammy.info> dateThu 24 Aug 2017, 17:45 (9 years ago) parent5365bae
2 files changed+52−1
src/Text/Pandoc/Readers/LaTeX.hs+29−1 test/Tests/Readers/LaTeX.hs+23
src/Text/Pandoc/Readers/LaTeX.hs+29−1
@@ -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 ->
test/Tests/Readers/LaTeX.hs+23
@@ -143,6 +143,29 @@ tests = [ testGroup "basic"
143143 "hello\\pfbreak*{}goodbye" =?>
144144 para (str "hello") <> horizontalRule <> para (str "goodbye")
145145 ]
146+ , testGroup "biblatex roman numerals"
147+ [ "upper" =:
148+ "number \\RN{12}" =?>
149+ para (str "number" <> space <> str "XII")
150+ , "lower" =:
151+ "number \\Rn{29}" =?>
152+ para (str "number" <> space <> str "xxix")
153+ , "leading zero" =:
154+ "\\Rn{014}" =?>
155+ para (str "xiv")
156+ , "surrounding spaces" =:
157+ "number \\Rn{ 41 }" =?>
158+ para (str "number" <> space <> str "xli")
159+ , "zero" =:
160+ "\\RN{0}" =?>
161+ para (str "")
162+ , "space then unbraced argument" =:
163+ "\\RN 7 ok" =?>
164+ para (str "VII" <> space <> str "ok")
165+ , "space before braced argument" =:
166+ "\\Rn {13}ok" =?>
167+ para (str "xiiiok")
168+ ]
146169 ]
147170
148171baseCitation :: Citation