Some refactoring in GF.Compile and GF.Compile.GetGrammar

Move source transcoding function GF.Compile to GF.Compile.GetGrammar, in
preparation for doing transcoding before lexing.
This commit is contained in:
hallgren
2013-11-21 16:27:26 +00:00
parent c8d2ed96fd
commit 14bbbf1f27
2 changed files with 22 additions and 19 deletions

View File

@@ -13,7 +13,6 @@ import GF.Compile.GrammarToPGF
import GF.Compile.ReadFiles import GF.Compile.ReadFiles
import GF.Compile.Update import GF.Compile.Update
--import GF.Compile.Refresh --import GF.Compile.Refresh
import GF.Compile.Coding
import GF.Compile.Tags import GF.Compile.Tags
import GF.Grammar.Grammar import GF.Grammar.Grammar
@@ -27,7 +26,6 @@ import GF.Infra.CheckM
import GF.Data.Operations import GF.Data.Operations
import Control.Monad import Control.Monad
import System.IO
import GF.System.Directory import GF.System.Directory
import System.FilePath import System.FilePath
import qualified Data.Map as Map import qualified Data.Map as Map
@@ -164,11 +162,8 @@ compileOne opts env@(_,srcgr,_) file = do
then compileOne opts env $ (gf2gfo opts file) then compileOne opts env $ (gf2gfo opts file)
else do else do
sm00 <- putpOpt ("- parsing" +++ file) ("- compiling" +++ file ++ "... ") $ sm <- putpOpt ("- parsing" +++ file) ("- compiling" +++ file ++ "... ")
getSourceModule opts file $ getSourceModule opts file
enc <- liftIO $ mkTextEncoding (renameEncoding (flag optEncoding (mflags (snd sm00))))
let sm = decodeStringsInModule enc sm00
intermOut opts (Dump Source) (ppModule Internal sm) intermOut opts (Dump Source) (ppModule Internal sm)
compileSourceModule opts env (Just file) sm compileSourceModule opts env (Just file) sm

View File

@@ -20,17 +20,16 @@ import GF.Data.Operations
import GF.System.Catch import GF.System.Catch
import GF.Infra.UseIO import GF.Infra.UseIO
import GF.Infra.Option(Options,optPreprocessors,addOptions,flag) import GF.Infra.Option(Options,optPreprocessors,addOptions,optEncoding,flag,renameEncoding)
import GF.Grammar.Lexer import GF.Grammar.Lexer
import GF.Grammar.Parser import GF.Grammar.Parser
import GF.Grammar.Grammar import GF.Grammar.Grammar
import GF.Compile.Coding
--import GF.Compile.ReadFiles
--import Data.Char (toUpper)
import qualified Data.ByteString.Char8 as BS import qualified Data.ByteString.Char8 as BS
import Control.Monad (foldM) import Control.Monad (foldM)
import System.Cmd (system) import System.Cmd (system)
import System.IO(mkTextEncoding)
import System.Directory(removeFile) import System.Directory(removeFile)
getSourceModule :: Options -> FilePath -> IOE SourceModule getSourceModule :: Options -> FilePath -> IOE SourceModule
@@ -41,10 +40,19 @@ getSourceModule opts file0 = ioe $
Left (Pn l c,msg) -> do file <- writeTemp tmp Left (Pn l c,msg) -> do file <- writeTemp tmp
let location = file++":"++show l++":"++show c let location = file++":"++show l++":"++show c
return (Bad (location++":\n "++msg)) return (Bad (location++":\n "++msg))
Right (i,mi) -> do removeTemp tmp Right (i,mi00) ->
return (Ok (i,mi{mflags=mflags mi `addOptions` opts, msrc=file0})) do removeTemp tmp
let mi0 =mi00 {mflags=mflags mi00 `addOptions` opts, msrc=file0}
mi <- transcodeModule (i,mi0)
return (Ok mi)
`catch` (return . Bad . show) `catch` (return . Bad . show)
transcodeModule sm00 =
do enc <- mkTextEncoding (renameEncoding (flag optEncoding (mflags (snd sm00))))
let sm = decodeStringsInModule enc sm00
return sm
runPreprocessor :: Temporary -> String -> IO Temporary runPreprocessor :: Temporary -> String -> IO Temporary
runPreprocessor tmp0 p = runPreprocessor tmp0 p =
maybe external internal (lookup p builtin_preprocessors) maybe external internal (lookup p builtin_preprocessors)