mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-06 17:52:51 -06:00
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:
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user