summaryrefslogtreecommitdiff
path: root/src/GFI.hs
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-02-23 14:17:16 +0000
committerkrasimir <krasimir@chalmers.se>2009-02-23 14:17:16 +0000
commit6be08d77e01ae418634897de62d44b5b1782566a (patch)
tree79e392ca7bfd2ffbb284f804fb6612b748adf5da /src/GFI.hs
parentb7d2916bbed9d1eec92066061d0fc0d5d35739b4 (diff)
fix the handling of flag coding
Diffstat (limited to 'src/GFI.hs')
-rw-r--r--src/GFI.hs25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/GFI.hs b/src/GFI.hs
index 748fcfe55..e5926f5e9 100644
--- a/src/GFI.hs
+++ b/src/GFI.hs
@@ -21,6 +21,7 @@ import PGF.Macros
import PGF.Expr (readTree)
import Data.Char
+import Data.Maybe
import Data.List(isPrefixOf)
import qualified Data.Map as Map
import qualified Text.ParserCombinators.ReadP as RP
@@ -140,15 +141,19 @@ loop opts gfenv0 = do
"ph":_ ->
mapM_ (putStrLn . enc) (reverse (history gfenv0)) >> loopNewCPU gfenv
- "se":c:_ -> do
+ "se":c:_ ->
+ case lookup c encodings of
+ Just cod -> do
#ifdef mingw32_HOST_OS
- case c of
- 'c':'p':c -> case reads c of
- [(cp,"")] -> setConsoleCP cp >> setConsoleOutputCP cp
- _ -> return ()
- _ -> return ()
+ case c of
+ 'c':'p':c -> case reads c of
+ [(cp,"")] -> setConsoleCP cp >> setConsoleOutputCP cp
+ _ -> return ()
+ _ -> return ()
#endif
- loopNewCPU $ gfenv {coding = c}
+ loopNewCPU $ gfenv {coding = cod}
+ Nothing -> do putStrLn "unknown encoding"
+ loopNewCPU gfenv
-- ordinary commands, working on CommandEnv
_ -> do
@@ -208,16 +213,16 @@ data GFEnv = GFEnv {
commandenv :: CommandEnv,
history :: [String],
cputime :: Integer,
- coding :: String
+ coding :: Encoding
}
emptyGFEnv :: IO GFEnv
emptyGFEnv = do
#ifdef mingw32_HOST_OS
codepage <- getACP
- let coding = "cp"++show codepage
+ let coding = fromMaybe UTF_8 (lookup ("cp"++show codepage) encodings)
#else
- let coding = "utf8"
+ let coding = UTF_8
#endif
return $ GFEnv emptyGrammar (mkCommandEnv coding emptyPGF) [] 0 coding