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