@@ -21,7 +21,7 @@ dosiunitx tok = do
22 value <- tok
22 value <- tok
23 valueprefix <- option "" $ bracketed tok
23 valueprefix <- option "" $ bracketed tok
24− unit <- rawUnit tok
24+ unit <- grouped (siUnit tok) <|> tok
25 return . mconcat $ [valueprefix,
25 return . mconcat $ [valueprefix,
26 emptyOr160 valueprefix,
26 emptyOr160 valueprefix,
@@ -36,7 +36,7 @@ doSIrange tok = do
36 startvalueprefix <- option "" $ bracketed tok
36 startvalueprefix <- option "" $ bracketed tok
37 stopvalue <- tok
37 stopvalue <- tok
38 stopvalueprefix <- option "" $ bracketed tok
38 stopvalueprefix <- option "" $ bracketed tok
39− unit <- rawUnit tok
39+ unit <- grouped (siUnit tok) <|> tok
40 return . mconcat $ [startvalueprefix,
40 return . mconcat $ [startvalueprefix,
41 emptyOr160 startvalueprefix,
41 emptyOr160 startvalueprefix,
42 startvalue,
42 startvalue,
@@ -49,23 +49,33 @@ doSIrange tok = do
49 emptyOr160 unit,
49 emptyOr160 unit,
52−rawUnit :: PandocMonad m => LP m Inlines -> LP m Inlines
53−rawUnit tok = grouped (mconcat <$> many1 (siUnit tok)) <|> siUnit tok <|> tok
55emptyOr160 :: Inlines -> Inlines
52emptyOr160 :: Inlines -> Inlines
56emptyOr160 x = if x == mempty then x else str "\160"
53emptyOr160 x = if x == mempty then x else str "\160"
58siUnit :: PandocMonad m => LP m Inlines -> LP m Inlines
55siUnit :: PandocMonad m => LP m Inlines -> LP m Inlines
59siUnit tok = do
56siUnit tok = do
60 Tok _ (CtrlSeq name) _ <- anyControlSeq
57 Tok _ (CtrlSeq name) _ <- anyControlSeq
61− if name == "square"
59+ "square" -> do
62− then do
60+ unit <- siUnit tok
61+ return $ unit <> superscript "2"
63− unit <- rawUnit tok
63+ unit <- siUnit tok
64− return $ unit <> "\178"
64+ return $ unit <> superscript "3"
65− else
65+ "raisetothe" -> do
68+ return $ unit <> superscript n
66 case M.lookup name siUnitMap of
70 case M.lookup name siUnitMap of
67− Just il -> return il
71+ Just il ->
74+ [ (il <> superscript "2") <$ controlSeq "squared"
75+ , (il <> superscript "3") <$ controlSeq "cubed"
76+ , (\n -> il <> superscript n) <$> (controlSeq "tothe" *> tok)
68− Nothing -> mzero
78+ Nothing -> tok
70siUnitMap :: M.Map Text Inlines
80siUnitMap :: M.Map Text Inlines
71siUnitMap = M.fromList
81siUnitMap = M.fromList