@@ -70,10 +70,22 @@ parseNumPart =
70 parseX <|>
70 parseX <|>
71 parseSpace
71 parseSpace
73− parseDecimalNum =
73+ parseDecimalNum = do
74− str . T.pack <$> many1 (satisfy (\c -> isDigit c || c == '.'))
74+ basenum <- T.pack <$> many1 (satisfy (\c -> isDigit c || c == '.'))
75+ uncertainty <- option mempty $ T.pack <$> parseParens
76+ if T.null uncertainty
77+ then return $ str basenum
78+ else return $ str $ basenum <> "\xa0\xb1\xa0" <>
79+ case T.break (=='.') basenum of
81+ | T.length ys <= 1 -> uncertainty
82+ | otherwise -> "0." <>
83+ T.replicate (T.length ys - 1 - T.length uncertainty) "0"
75 parseComma = str "." <$ char ','
85 parseComma = str "." <$ char ','
76 parsePlusMinus = str "\xa0\xb1\xa0" <$ try (string "+-")
86 parsePlusMinus = str "\xa0\xb1\xa0" <$ try (string "+-")
88+ char '(' *> many1 (satisfy (\c -> isDigit c || c == '.')) <* char ')'
77 parseI = str "i" <$ char 'i'
89 parseI = str "i" <$ char 'i'
78 parseX = str "\xa0\xd7\xa0" <$ char 'x'
90 parseX = str "\xa0\xd7\xa0" <$ char 'x'
79 parseExp = (\n -> str ("\xa0\xd7\xa0" <> "10") <> superscript n)
91 parseExp = (\n -> str ("\xa0\xd7\xa0" <> "10") <> superscript n)