import System.IO import System.Environment import Data.Char import System.Directory main = do fileList <- listDirectory "." let texFiles = reverseElts (getTexFiles (reverseElts fileList)) convertAndWrite texFiles data Mode = Search | Command | Comment convertTex :: String -> Mode -> String convertTex ('%':bs) Search = "%" ++ convertTex bs Comment convertTex ['\n'] Comment = "" convertTex ('\n':bs) Comment = "
\n" ++ convertTex bs Search convertTex (b:bs) Comment = (b:convertTex bs Comment) convertTex [] Comment = "" convertTex (b:bs) Search | b == '{' || b == '}' || b == '[' || b == ']' = "" ++ [b] ++ "" ++ convertTex bs Search convertTex ['\n'] Search = [] convertTex ('\n':b) Search = "
\n" ++ convertTex b Search convertTex ('\\':'d':'o':'c':'u':'m':'e':'n':'t':'c':'l':'a':'s':'s':b) Search = "\\documentclass" ++ convertTex b Search convertTex ('\\':'b':'e':'g':'i':'n':b) Search = "\\begin" ++ convertTex b Search convertTex ('\\':'u':'s':'e':'p':'a':'c':'k':'a':'g':'e':b) Search = "\\usepackage" ++ convertTex b Search convertTex ('\\':'e':'n':'d':b) Search = "\\end" ++ convertTex b Search convertTex ('\\':bs) Search = "\\" ++ convertTex bs Command convertTex (b:bs) Search = (b:convertTex bs Search) convertTex (b:bs) Command | isLetter b = (b:convertTex bs Command) | otherwise = "" ++ convertTex (b:bs) Search convertTex [] Command = "" convertTex [] Search = [] reverseElts :: [String] -> [String] reverseElts (a:as) = ((reverse a):reverseElts as) reverseElts [] = [] getTexFiles :: [String] -> [String] getTexFiles (('x':'e':'t':'.':as):b) = (as:getTexFiles b) getTexFiles (b:bs) = getTexFiles bs getTexFiles [] = [] convertAndWrite :: [String] -> IO() convertAndWrite [] = do return() convertAndWrite (a:as) = do tex <- readFile (a ++ ".tex") writeFile (a ++ ".conv") (convertTex tex Search) convertAndWrite as