packages feed

lhs2TeX-hl-0.1.2.0: src/LiterateHighlighter.hs

module Main where

import Data.List

import System( getArgs )
import System.IO


import Language.Haskell.Exts

-----------------------------

import Base.CLI
import System.Console.CmdArgs

-- import Literate.Agda
import Literate.Haskell 
import Literate.SimpleInfo

-----------------------------


main = do args <- cmdArgsRun standard

          hSetEncoding stdin  utf8
          hSetEncoding stdout utf8
          hSetEncoding stderr utf8
         
          hOutput <- openFile (output args) WriteMode
          hSetEncoding hOutput utf8

          let writer = writeOutput hOutput
                           
          if (agda_mode args)
            then
              error "Agda mode is currently not supported."
              -- mapM_ (\file -> runAgda file
              --                      >>= (flip writer) Literate.Agda.mapping)
              --                     (input args)
            else
              mapM_ (\file -> runHaskell file
                     >>= (flip writer) Literate.Haskell.mapping)
                    (input args)
          
          hClose hOutput
  where printFormat keyword seek rep = "%format " ++ seek ++ " = \" {\\lhsCH" ++ keyword ++ "{" ++ rep ++ "}}\"" 
        writeOutput output si mapping = 
                      mapM_  (\(keyword, f) -> mapM_ (\ (seek,rep) -> hPutStrLn output $ printFormat keyword seek rep) 
                                                     (filter lhs2TeXSafe (f si))
                             ) 
                             mapping
                    
lhs2TeXSafe :: (String, String) -> Bool
lhs2TeXSafe ("()" , _)  = False
lhs2TeXSafe _           = True