diff options
| author | krasimir <krasimir@chalmers.se> | 2009-02-23 14:17:16 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2009-02-23 14:17:16 +0000 |
| commit | 6be08d77e01ae418634897de62d44b5b1782566a (patch) | |
| tree | 79e392ca7bfd2ffbb284f804fb6612b748adf5da /src/GFI.hs | |
| parent | b7d2916bbed9d1eec92066061d0fc0d5d35739b4 (diff) | |
fix the handling of flag coding
Diffstat (limited to 'src/GFI.hs')
| -rw-r--r-- | src/GFI.hs | 25 |
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 |
