@@ -70,10 +70,22 @@ parseNumPart =
7070 parseX <|>
7171 parseSpace
7272 where
73− parseDecimalNum =
74− str . T.pack <$> many1 (satisfy (\c -> isDigit c || c == '.'))
73+ parseDecimalNum = do
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
80+ (_,ys)
81+ | T.length ys <= 1 -> uncertainty
82+ | otherwise -> "0." <>
83+ T.replicate (T.length ys - 1 - T.length uncertainty) "0"
84+ <> uncertainty
7585 parseComma = str "." <$ char ','
7686 parsePlusMinus = str "\xa0\xb1\xa0" <$ try (string "+-")
87+ parseParens =
88+ char '(' *> many1 (satisfy (\c -> isDigit c || c == '.')) <* char ')'
7789 parseI = str "i" <$ char 'i'
7890 parseX = str "\xa0\xd7\xa0" <$ char 'x'
7991 parseExp = (\n -> str ("\xa0\xd7\xa0" <> "10") <> superscript n)