diff --git a/lib/resource-1.0/french/DiffFre.gf b/lib/resource-1.0/french/DiffFre.gf index c6bf7d8f5..e9f2e523c 100644 --- a/lib/resource-1.0/french/DiffFre.gf +++ b/lib/resource-1.0/french/DiffFre.gf @@ -113,11 +113,14 @@ instance DiffFre of DiffRomance = open CommonRomance, PhonoFre, Prelude in { _ => } ; - mkImperative vp = { + mkImperative p vp = { s = \\pol,aag => let - agr = aag ** {p = P2} ; - verb = (vp.s ! VPImperat).fin ! agr ; + agr = aag ** {p = p} ; + verb = case p of { + P1 => (vp.s ! VPFinite (VPres Indic) Simul).fin ! agr ; + _ => (vp.s ! VPImperat).fin ! agr --- P2 only + } ; neg = vp.neg ! pol ; clpr = pronArgGen pol agr.n agr.p vp.clAcc vp.clDat ; compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol diff --git a/lib/resource-1.0/french/IdiomFre.gf b/lib/resource-1.0/french/IdiomFre.gf index 90f49e630..1ca88f091 100644 --- a/lib/resource-1.0/french/IdiomFre.gf +++ b/lib/resource-1.0/french/IdiomFre.gf @@ -31,8 +31,8 @@ concrete IdiomFre of Idiom = CatFre ** (\\a => "en" ++ "train" ++ elisDe ++ infVP vp a) (predV copula) ; - ImpPl1 vp = {s = - (mkClause [] {g = Fem ; n = Pl ; p = P1} vp).s ! RPres ! Simul ! Pos ! Indic + ImpPl1 vp = {s = + (mkImperative P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem } ; oper diff --git a/lib/resource-1.0/italian/DiffIta.gf b/lib/resource-1.0/italian/DiffIta.gf index 28d78525c..3e45cc3d1 100644 --- a/lib/resource-1.0/italian/DiffIta.gf +++ b/lib/resource-1.0/italian/DiffIta.gf @@ -101,12 +101,13 @@ instance DiffIta of DiffRomance = open CommonRomance, PhonoIta, BeschIta, Prelud in ; - mkImperative vp = { + mkImperative p vp = { s = \\pol,aag => let - agr = aag ** {p = P2} ; - verb = case of { - => (vp.s ! VPInfinit Simul).inf ! aag ; + agr = aag ** {p = p} ; + verb = case of { + <_,_, P1> => (vp.s ! VPFinite (VPres Indic) Simul).fin ! agr ; + => (vp.s ! VPInfinit Simul).inf ! aag ; _ => (vp.s ! VPImperat).fin ! agr } ; neg = vp.neg ! pol ; diff --git a/lib/resource-1.0/italian/IdiomIta.gf b/lib/resource-1.0/italian/IdiomIta.gf index 54bdd8dbd..b31eceaa8 100644 --- a/lib/resource-1.0/italian/IdiomIta.gf +++ b/lib/resource-1.0/italian/IdiomIta.gf @@ -40,8 +40,8 @@ concrete IdiomIta of Idiom = CatIta ** ) (predV (essereV (verboV (stare_16 "stare")))) ; - ImpPl1 vp = {s = - (mkClause [] {g = Fem ; n = Pl ; p = P1} vp).s ! RPres ! Simul ! Pos ! Indic + ImpPl1 vp = {s = + (mkImperative P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem } ; } diff --git a/lib/resource-1.0/romance/DiffRomance.gf b/lib/resource-1.0/romance/DiffRomance.gf index 5d58ac90d..4e7e35901 100644 --- a/lib/resource-1.0/romance/DiffRomance.gf +++ b/lib/resource-1.0/romance/DiffRomance.gf @@ -47,7 +47,7 @@ interface DiffRomance = open CommonRomance, Prelude in { -- To render imperatives (with their clitics etc). - oper mkImperative : CommonRomance.VP -> {s : Polarity => AAgr => Str} ; + oper mkImperative : Person -> CommonRomance.VP -> {s : Polarity => AAgr => Str} ; --2 Constants that must derivatively depend on language diff --git a/lib/resource-1.0/romance/SentenceRomance.gf b/lib/resource-1.0/romance/SentenceRomance.gf index 5433ed91b..09000907b 100644 --- a/lib/resource-1.0/romance/SentenceRomance.gf +++ b/lib/resource-1.0/romance/SentenceRomance.gf @@ -8,7 +8,7 @@ incomplete concrete SentenceRomance of Sentence = PredSCVP sc vp = mkClause sc.s (agrP3 Masc Sg) vp ; - ImpVP = mkImperative ; + ImpVP = mkImperative P2 ; SlashV2 np v2 = {s = \\ag =>case of { diff --git a/lib/resource-1.0/spanish/DiffSpa.gf b/lib/resource-1.0/spanish/DiffSpa.gf index 1cb21df10..fa9e624c5 100644 --- a/lib/resource-1.0/spanish/DiffSpa.gf +++ b/lib/resource-1.0/spanish/DiffSpa.gf @@ -74,12 +74,13 @@ instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelud -- => <"te" ++ "me", []> ; -- <_,_,CPron {n = Sg ; p = P2},CPron {n = Sg ; p = P1}> => <"te" ++ "me", []> ; - mkImperative vp = { + mkImperative p vp = { s = \\pol,aag => let - agr = aag ** {p = P2} ; - verb = case of { - => (vp.s ! VPFinite (VPres Conjunct) Simul).fin ! agr ; + agr = aag ** {p = p} ; + verb = case of { + <_,_, P1> => (vp.s ! VPFinite (VPres Conjunct) Simul).fin ! agr ; + => (vp.s ! VPFinite (VPres Conjunct) Simul).fin ! agr ; _ => (vp.s ! VPImperat).fin ! agr } ; neg = vp.neg ! pol ; diff --git a/lib/resource-1.0/spanish/IdiomSpa.gf b/lib/resource-1.0/spanish/IdiomSpa.gf index fe8b580e9..8d411d522 100644 --- a/lib/resource-1.0/spanish/IdiomSpa.gf +++ b/lib/resource-1.0/spanish/IdiomSpa.gf @@ -36,8 +36,8 @@ concrete IdiomSpa of Idiom = CatSpa ** ) (predV (verboV (estar_2 "estar"))) ; - ImpPl1 vp = {s = - (mkClause [] {g = Fem ; n = Pl ; p = P1} vp).s ! RPres ! Simul ! Pos ! Indic + ImpPl1 vp = {s = + (mkImperative P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem } ; } diff --git a/src/GF/Compile/ShellState.hs b/src/GF/Compile/ShellState.hs index 88da1283b..07ddaa97a 100644 --- a/src/GF/Compile/ShellState.hs +++ b/src/GF/Compile/ShellState.hs @@ -237,7 +237,8 @@ updateShellState opts ign mcnc sh ((_,sgr,gr),rts) = do concr0 = ifNull Nothing (return . head) concrs notInrts f = notElem f $ map fst rts subcgr = unSubelimCanon cgr - cf's0 <- if oElem noCF opts + cf's0 <- if (not (oElem (iOpt "docf") opts) && -- cf only built with -docf + (oElem noCF opts || not (hasHOAS cgr))) -- or HOAS, if not -nocf then return $ map snd $ cfs sh else mapM (canon2cf opts ign subcgr) newConcrs let cf's = zip newConcrs cf's0 ++ filter toRetain (cfs sh) diff --git a/src/HelpFile b/src/HelpFile index 96afff0ec..baf2bf761 100644 --- a/src/HelpFile +++ b/src/HelpFile @@ -31,7 +31,8 @@ i, import: i File -src from source: ignore precompiled gfc and gfr files -gfc from gfc: use compiled modules whenever they exist -retain retain operations: read resource modules (needed in comm cc) - -nocf don't build context-free grammar (thus no parser) + -nocf don't build old-style context-free grammar (default without HOAS) + -docf do build old-style context-free grammar (default with HOAS) -nocheckcirc don't eliminate circular rules from CF -cflexer build an optimized parser with separate lexer trie -noemit do not emit code (default with old grammar format)