PPU.hs

-- Pretty printing with Unicode (and other) options...

module PPU(module PPU,module PrettyPrint) where
import Prelude hiding (catch)
import PrettyPrint
import PrettyEnv
import UTF8Util
import MUtils(( # ))
import List(isSuffixOf)
import AbstractIO

type PPOpts = (Bool,PPHsMode)
ppOpts0 = (False,defaultMode)

ppu :: Printable a => (Bool, PPHsMode) -> a -> String
ppu (u,opts) = (if u then utf8 else id) . pp . withPPEnv opts . ppi

ucatch u io = if u then io `catch` utf8err else io

getPPopts :: SystemIO io => io ((Bool,PPHsMode),String,[String])
getPPopts =
    do --u <- utf8env
       let u=False
       name <- getProgName
       (ppOpts,args) <- opts defaultMode{useUnicode=u} # getArgs
       return ((useUnicode ppOpts,ppOpts),name,args)
  where
    opts o ("+debug":args) = opts o{debugInfo =True } args
    opts o ("-debug":args) = opts o{debugInfo =False} args
    opts o ("+tinfo":args) = opts o{typeInfo  =True } args
    opts o ("-tinfo":args) = opts o{typeInfo  =False} args
    opts o ("+utf8" :args) = opts o{useUnicode=True } args
    opts o ("-utf8" :args) = opts o{useUnicode=False} args
    opts o args@(('l':'a':'y':'o':'u':'t':'=':lts):args1) =
      case reads lts of
	(lt,_):_ ->          opts o{layoutType=lt   } args1
	_        -> (o,args)
    opts o args   = (o,args)

{-	 
-- A quick hack. Find a better way to test if UTF-8 output is appropriate!
utf8env =
   do lang <- getEnv "LANG" `catch` const (return "")
      return (any (`isSuffixOf` lang) ["utf8","UTF-8"])
-}

Plain-text version of PPU.hs | Valid HTML?