@@ -37,16 +37,20 @@ import Text.Pandoc.Definition
37-- | Converts a string of raw TeX math to a list of 'Pandoc' inlines.
37-- | Converts a string of raw TeX math to a list of 'Pandoc' inlines.
38readTeXMath :: String -> [Inline]
38readTeXMath :: String -> [Inline]
39readTeXMath inp = case parse teXMath ("formula: " ++ inp) inp of
39readTeXMath inp = case parse teXMath ("formula: " ++ inp) inp of
40− Left err -> [Str inp] -- if unparseable, just include original
40+ Left _ -> [Str inp] -- if unparseable, just include original
41 Right res -> res
41 Right res -> res
43+teXMath :: GenParser Char st [Inline]
43teXMath = manyTill mathPart eof >>= return . concat
44teXMath = manyTill mathPart eof >>= return . concat
46+mathPart :: GenParser Char st [Inline]
45mathPart = whitespace <|> superscript <|> subscript <|> symbol <|>
47mathPart = whitespace <|> superscript <|> subscript <|> symbol <|>
46 argument <|> digits <|> letters <|> misc
48 argument <|> digits <|> letters <|> misc
50+whitespace :: GenParser Char st [Inline]
48whitespace = many1 space >> return []
51whitespace = many1 space >> return []
53+symbol :: GenParser Char st [Inline]
50symbol = try $ do
54symbol = try $ do
52 res <- many1 letter
56 res <- many1 letter
@@ -54,6 +58,7 @@ symbol = try $ do
54 Just m -> return [Str m]
58 Just m -> return [Str m]
55 Nothing -> return [Str $ "\\" ++ res]
59 Nothing -> return [Str $ "\\" ++ res]
61+argument :: GenParser Char st [Inline]
57argument = try $ do
62argument = try $ do
59 res <- many mathPart
64 res <- many mathPart
@@ -62,35 +67,43 @@ argument = try $ do
62 then [Str " "]
67 then [Str " "]
63 else [Str "{"] ++ concat res ++ [Str "}"]
68 else [Str "{"] ++ concat res ++ [Str "}"]
70+digits :: GenParser Char st [Inline]
65digits = do
71digits = do
66 res <- many1 digit
72 res <- many1 digit
67 return [Str res]
73 return [Str res]
75+letters :: GenParser Char st [Inline]
69letters = do
76letters = do
70 res <- many1 letter
77 res <- many1 letter
71 return [Emph [Str res]]
78 return [Emph [Str res]]
80+misc :: GenParser Char st [Inline]
74 res <- noneOf "}"
82 res <- noneOf "}"
75 return [Str [res]]
83 return [Str [res]]
85+scriptArg :: GenParser Char st [Inline]
77scriptArg = try $ do
86scriptArg = try $ do
78 (try (do{char '{'; r <- many mathPart; char '}'; return $ concat r}))
87 (try (do{char '{'; r <- many mathPart; char '}'; return $ concat r}))
79 <|> symbol
88 <|> symbol
80 <|> (do{c <- (letter <|> digit); return [Str [c]]})
89 <|> (do{c <- (letter <|> digit); return [Str [c]]})
91+superscript :: GenParser Char st [Inline]
82superscript = try $ do
92superscript = try $ do
84 arg <- scriptArg
94 arg <- scriptArg
85 return [Superscript arg]
95 return [Superscript arg]
97+subscript :: GenParser Char st [Inline]
87subscript = try $ do
98subscript = try $ do
89 arg <- scriptArg
100 arg <- scriptArg
90 return [Subscript arg]
101 return [Subscript arg]
103+withThinSpace :: String -> String
92withThinSpace str = "\x2009" ++ str ++ "\x2009"
104withThinSpace str = "\x2009" ++ str ++ "\x2009"
106+teXsymbols :: [(String, String)]
94teXsymbols =
107teXsymbols =
95 [("alpha","\x3B1")
108 [("alpha","\x3B1")
96 ,("beta", "\x3B2")
109 ,("beta", "\x3B2")