module BeautifyTeXOutput
( beautifyFormula
) where
import Data.List (foldl', isPrefixOf)
beautifyFormula :: String -> String
beautifyFormula =
subscripts . dictReplace . unlines . map cups . lines
dictReplace :: String -> String
dictReplace s = foldl' f s dictionary
where f input (text, subst) = replace text subst input
replace :: String -> String -> String -> String
replace text subst = go
where go input | text `isPrefixOf` input =
subst ++ go (drop (length text) input)
go (x:xs) = x : go xs
go [] = []
-- The following is stuff by Florian Stenger
-- The left-hand sides of tuples are to be replaced by
-- the corresponding right-hand sides.
dictionary =
[ ("->^{seq,=}", "relseqeq")
, ("->^{seq,[=}", "relseqineq")
, ("^{-1}", " invfun")
, ("_|_", "undefined")
, ("[=", "blw")
]
-- If a line starts with "u", replace "u" by "cup". Preceeding spaces are ignored.
cups :: String -> String
cups (' ':xs) = " " ++ cups xs
cups ('u':' ':xs) = "cup " ++ xs
cups s = s
-- Makes subscripts a little prettier by removing curly braces.
subscripts :: String -> String
subscripts [] = []
subscripts ('_':'{':xs) =
'_' : subscripts' xs
subscripts (x:xs) =
x : subscripts xs
subscripts' :: String -> String
subscripts' ('}':xs) = subscripts xs
subscripts' (x:xs) =
x : subscripts' xs