New unicodings.

New unicodings.
Module with works.

Better compilation of old GF.
This commit is contained in:
aarne
2003-11-14 12:36:23 +00:00
parent 37384dbe06
commit 5a7d6e542d
10 changed files with 75 additions and 22 deletions

View File

@@ -36,7 +36,9 @@ string2annotTree gr m = annotate gr . string2absTerm (prt m) ---- prt
shellStateFromFiles :: Options -> ShellState -> FilePath -> IOE ShellState
shellStateFromFiles opts st file = do
let osb = addOptions (options [beVerbose, emitCode]) opts ---
let osb = if oElem showOld opts
then addOptions (options [beVerbose]) opts -- for old, no emit
else addOptions (options [beVerbose, emitCode]) opts -- for new, do
grts <- compileModule osb st file
ioeErr $ updateShellState opts st grts
--- liftM (changeModTimes rts) $ grammar2shellState opts gr

View File

@@ -88,6 +88,7 @@ patt2term p = case p of
anyTerm :: Term
anyTerm = LI (A.identC "_") --- should not happen
matchPatt cs0 (FV ts) = liftM FV $ mapM (matchPatt cs0) ts
matchPatt cs0 trm = term2patt trm >>= match cs0 where
match cs t =
case cs of

View File

@@ -54,6 +54,21 @@ batchCompileOld f = compileOld defOpts f
compileModule :: Options -> ShellState -> FilePath ->
IOE (GFC.CanonGrammar, (SourceGrammar,[(FilePath,ModTime)]))
compileModule opts st0 file | oElem showOld opts = do
let putp = putPointE opts
let path = [] ----
grammar1 <- putp ("- parsing old gf" +++ file) $ getOldGrammar opts file
let mods = modules grammar1
let env = compileEnvShSt st0 []
(_,sgr,cgr) <- foldM (comp putp path) env mods
return $ (reverseModules cgr, -- to preserve dependency order
(reverseModules sgr,[]))
where
comp putp path env sm0 = do
(k',sm) <- makeSourceModule opts env sm0
cm <- putp " generating code... " $ generateModuleCode opts path sm
extendCompileEnvInt env (k',sm,cm)
compileModule opts1 st0 file = do
opts0 <- ioeIO $ getOptionsFromFile file
let useFileOpt = maybe False (const True) $ getOptVal opts0 pathList
@@ -168,7 +183,6 @@ compileSourceModule opts env@(k,gr,can) mo@(i,mi) = do
mo1 <- ioeErr $ rebuildModule mos mo
mo1b <- ioeErr $ extendModule mos mo1
---- prDebug mo1b
case mo1b of
(_,ModMod n) | not (isCompleteModule n) -> do
@@ -185,8 +199,8 @@ compileSourceModule opts env@(k,gr,can) mo@(i,mi) = do
return (k',mo4)
where
prDebug mo = ioeIO $ putStrLn $ prGrammar $ MGrammar [mo] ---- debug
---- prDebug mo = ioeIO $ putStrLn $ prGrammar $ MGrammar [mo] ---- debug
prDebug mo = ioeIO $ print $ length $ lines $ prGrammar $ MGrammar [mo]
generateModuleCode :: Options -> InitPath -> SourceModule -> IOE GFC.CanonModule
generateModuleCode opts path minfo@(name,info) = do
@@ -207,12 +221,14 @@ generateModuleCode opts path minfo@(name,info) = do
return (gfcFile pname, code)
if isCompilable info && emit && nomulti
then ioeIO $ writeFile file out >> putStr (" wrote file" +++ file)
else ioeIO $ putStrFlush "no need to save for this module "
else ioeIO $ putStrFlush $ "no need to save module" +++ prt name
return minfo'
where
isCompilable _ = True ---- isCompilableModule ---- emit code for interfaces
isCompilable mi = case mi of
ModMod m -> not $ isModCnc m && mstatus m == MSIncomplete
_ -> True
nomulti = not $ oElem makeMulti opts
emit = oElem emitCode opts
emit = oElem emitCode opts && not (oElem notEmitCode opts)
optim = oElem optimizeCanon opts
-- for old GF: sort into modules, write files, compile as usual
@@ -220,7 +236,7 @@ generateModuleCode opts path minfo@(name,info) = do
compileOld :: Options -> FilePath -> IOE GFC.CanonGrammar
compileOld opts file = do
let putp = putPointE opts
grammar1 <- putp ("- parsing old gf" +++ file) $ getOldGrammar file
grammar1 <- putp ("- parsing old gf" +++ file) $ getOldGrammar opts file
files <- mapM writeNewGF $ modules grammar1
(_,_,grammar) <- foldM (compileOne opts) emptyCompileEnv files
return grammar

View File

@@ -33,11 +33,11 @@ getSourceModule file = do
-- for old GF format with includes
getOldGrammar :: FilePath -> IOE SourceGrammar
getOldGrammar file = do
getOldGrammar :: Options -> FilePath -> IOE SourceGrammar
getOldGrammar opts file = do
defs <- parseOldGrammarFiles file
let g = A.OldGr A.NoIncl defs
ioeErr $ transOldGrammar g file
ioeErr $ transOldGrammar opts file g
parseOldGrammarFiles :: FilePath -> IOE [A.TopDef]
parseOldGrammarFiles file = do

View File

@@ -144,6 +144,7 @@ beVerbose = iOpt "v"
showInfo = iOpt "i"
beSilent = iOpt "s"
emitCode = iOpt "o"
notEmitCode = iOpt "noemit"
makeMulti = iOpt "multi"
beShort = iOpt "short"
wholeGrammar = iOpt "w"
@@ -193,6 +194,11 @@ extractGr = aOpt "extract"
pathList = aOpt "path"
uniCoding = aOpt "coding"
useName = aOpt "name"
useAbsName = aOpt "abs"
useCncName = aOpt "cnc"
useResName = aOpt "res"
markLin = aOpt "mark"
markOptXML = oArg "xml"
markOptJava = oArg "java"

View File

@@ -139,9 +139,6 @@ execLine put (c@(co, os), arg, cs) (outps,st) = do
execC :: CommandOpt -> ShellIO
execC co@(comm, opts0) sa@((st,(h,_)),a) = case comm of
--- read old GF and write into files; no update of st yet
CImport file | oElem showOld opts -> useIOE sa $ batchCompileOld file >> return sa
CImport file -> useIOE sa $ do
st1 <- shellStateFromFiles opts st file
ioeIO $ changeState (const st1) sa --- \ ((_,h),a) -> ((st,h), a))

View File

@@ -12,6 +12,7 @@ import AbsGF
import PrintGF
import RemoveLiT --- for bw compat
import Operations
import Option
import Monad
import Char
@@ -482,8 +483,8 @@ transDDecl x = case x of
-- to deal with the old format, sort judgements in three modules, forming
-- their names from a given string, e.g. file name or overriding user-given string
transOldGrammar :: OldGrammar -> String -> Err G.SourceGrammar
transOldGrammar x name = case x of
transOldGrammar :: Options -> FilePath -> OldGrammar -> Err G.SourceGrammar
transOldGrammar opts name0 x = case x of
OldGr includes topdefs -> do --- includes must be collected separately
let moddefs = sortTopDefs topdefs
g1 <- transGrammar $ Gr moddefs
@@ -515,9 +516,10 @@ transOldGrammar x name = case x of
ne = NoExt
q = CMCompl
absName = identC topic
resName = identC ("Res" ++ lang)
cncName = identC lang
name = maybe name0 (++ ".gf") $ getOptVal opts useName
absName = identC $ maybe topic id $ getOptVal opts useAbsName
resName = identC $ maybe ("Res" ++ lang) id $ getOptVal opts useResName
cncName = identC $ maybe lang id $ getOptVal opts useCncName
(beg,rest) = span (/='.') name
(topic,lang) = case rest of -- to avoid overwriting old files

View File

@@ -1,13 +1,28 @@
module Hebrew where
mkHebrew :: String -> String
mkHebrew = reverse . unwords . (map mkHebrewWord) . words
mkHebrew = mkHebrewWord
--- reverse : assumes everything's on same line
type HebrewChar = Char
-- HH 031103 added code for spooling the markup
-- removed reverse, words, unwords (seemed obsolete and come out wrong on the screen)
mkHebrewWord :: String -> [HebrewChar]
mkHebrewWord = map mkHebrewChar
-- mkHebrewWord = map mkHebrewChar
mkHebrewWord s = case s of
[] -> []
'<' : cs -> '<' : spoolMarkup cs
' ' : cs -> ' ' : mkHebrewWord cs
c1 : cs -> mkHebrewChar c1 : mkHebrewWord cs
spoolMarkup :: String -> String
spoolMarkup s = case s of
[] -> [] -- Shouldn't happen
'>' : cs -> '>' : mkHebrewWord cs
c1 : cs -> c1 : spoolMarkup cs
mkHebrewChar c = case lookup c cc of Just c' -> c' ; _ -> c
where

View File

@@ -4,6 +4,13 @@ import Greek (mkGreek)
import Arabic (mkArabic)
import Hebrew (mkHebrew)
import Russian (mkRussian, mkRusKOI8)
import Ethiopic (mkEthiopic)
import Tamil (mkTamil)
import OCSCyrillic (mkOCSCyrillic)
import LatinASupplement (mkLatinASupplement)
import Devanagari (mkDevanagari)
import Hiragana (mkJapanese)
import ExtendedArabic (mkExtendedArabic)
-- ad hoc Unicode conversions from different alphabets
@@ -15,6 +22,13 @@ mkUnicode s = case s of
'/':'-':cs -> mkArabic (remClosing cs)
'/':'_':cs -> mkRussian (remClosing cs)
'/':'*':cs -> mkRusKOI8 (remClosing cs)
'/':'E':cs -> mkEthiopic (remClosing cs)
'/':'T':cs -> mkTamil (remClosing cs)
'/':'C':cs -> mkOCSCyrillic (remClosing cs)
'/':'&':cs -> mkDevanagari (remClosing cs)
'/':'L':cs -> mkLatinASupplement (remClosing cs)
'/':'J':cs -> mkJapanese (remClosing cs)
'/':'A':cs -> mkExtendedArabic (remClosing cs)
_ -> s
remClosing cs

View File

@@ -1 +1 @@
module Today where today = "Thu Nov 13 17:50:30 CET 2003"
module Today where today = "Fri Nov 14 14:23:19 CET 2003"