diff --git a/lib/resource-1.0/french/DiffFre.gf b/lib/resource-1.0/french/DiffFre.gf index 1e76694b8..aa07ab1a4 100644 --- a/lib/resource-1.0/french/DiffFre.gf +++ b/lib/resource-1.0/french/DiffFre.gf @@ -114,7 +114,7 @@ instance DiffFre of DiffRomance = open CommonRomance, PhonoFre, Prelude in { _ => } ; - mkImperative p vp = { + mkImperative b p vp = { s = \\pol,aag => let agr = aag ** {p = p} ; diff --git a/lib/resource-1.0/french/IdiomFre.gf b/lib/resource-1.0/french/IdiomFre.gf index 1ca88f091..712085c61 100644 --- a/lib/resource-1.0/french/IdiomFre.gf +++ b/lib/resource-1.0/french/IdiomFre.gf @@ -32,7 +32,7 @@ concrete IdiomFre of Idiom = CatFre ** (predV copula) ; ImpPl1 vp = {s = - (mkImperative P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem + (mkImperative False 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 4eac25472..1d93f7f44 100644 --- a/lib/resource-1.0/italian/DiffIta.gf +++ b/lib/resource-1.0/italian/DiffIta.gf @@ -105,13 +105,14 @@ instance DiffIta of DiffRomance = open CommonRomance, PhonoIta, BeschIta, Prelud in ; - mkImperative p vp = { + mkImperative b p vp = { s = \\pol,aag => let - agr = aag ** {p = p} ; + pe = case b of {True => P3 ; _ => p} ; + agr = aag ** {p = pe} ; clpr = pronArg agr.n agr.p vp.clAcc vp.clDat ; - verb = case of { - => (vp.s ! VPInfinit Simul clpr.p3).inf ! aag ; + verb = case of { + => (vp.s ! VPInfinit Simul clpr.p3).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 b31eceaa8..8541cb551 100644 --- a/lib/resource-1.0/italian/IdiomIta.gf +++ b/lib/resource-1.0/italian/IdiomIta.gf @@ -41,7 +41,7 @@ concrete IdiomIta of Idiom = CatIta ** (predV (essereV (verboV (stare_16 "stare")))) ; ImpPl1 vp = {s = - (mkImperative P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem + (mkImperative False 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 20e888fa3..55b55dec0 100644 --- a/lib/resource-1.0/romance/DiffRomance.gf +++ b/lib/resource-1.0/romance/DiffRomance.gf @@ -49,7 +49,7 @@ interface DiffRomance = open CommonRomance, Prelude in { -- To render imperatives (with their clitics etc). - oper mkImperative : Person -> CommonRomance.VP -> {s : Polarity => AAgr => Str} ; + oper mkImperative : Bool -> Person -> CommonRomance.VP -> {s : Polarity => AAgr => Str} ; --2 Constants that must derivatively depend on language diff --git a/lib/resource-1.0/romance/ResRomance.gf b/lib/resource-1.0/romance/ResRomance.gf index 2a286b5b2..4df1ced1d 100644 --- a/lib/resource-1.0/romance/ResRomance.gf +++ b/lib/resource-1.0/romance/ResRomance.gf @@ -61,11 +61,12 @@ oper habet : TMood -> Agr -> Str = \tm,a -> aux ! VFin tm a.n a.p ; habere : Str = aux ! VInfin False ; - vimp : Agr -> Str = \a -> verb.s ! VImper (case of { - => PlP1 ; - => SgP2 ; - => PlP2 - }) ; + vimp : Agr -> Str = \a -> case of { + => verb.s ! VImper PlP1 ; + <_, P3> => verb.s ! VFin (VPres Conjunct) a.n P3 ; + => verb.s ! VImper SgP2 ; + => verb.s ! VImper PlP2 + } ; vf : (Agr -> Str) -> (AAgr -> Str) -> { fin : Agr => Str ; diff --git a/lib/resource-1.0/romance/SentenceRomance.gf b/lib/resource-1.0/romance/SentenceRomance.gf index fa00e6acc..316d064da 100644 --- a/lib/resource-1.0/romance/SentenceRomance.gf +++ b/lib/resource-1.0/romance/SentenceRomance.gf @@ -10,8 +10,7 @@ incomplete concrete SentenceRomance of Sentence = ImpVP vp = { s = \\p,i,g => case i of { - ImpF n True => (mkImperative P2 vp).s ! p ! (aagr g Pl) ; --- fix for Spa,Ita - ImpF n False => (mkImperative P2 vp).s ! p ! (aagr g n) + ImpF n b => (mkImperative b P2 vp).s ! p ! (aagr g n) } } ; diff --git a/lib/resource-1.0/spanish/DiffSpa.gf b/lib/resource-1.0/spanish/DiffSpa.gf index ee95281d1..0b9464777 100644 --- a/lib/resource-1.0/spanish/DiffSpa.gf +++ b/lib/resource-1.0/spanish/DiffSpa.gf @@ -75,12 +75,13 @@ instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelud _ => } ; - mkImperative p vp = { + mkImperative b p vp = { s = \\pol,aag => let - agr = aag ** {p = p} ; - verb = case of { - => (vp.s ! VPFinite (VPres Conjunct) Simul).fin ! agr ; + pe = case b of {True => P3 ; _ => p} ; + agr = aag ** {p = pe} ; + verb = case of { + => (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 8d411d522..f875ea1bb 100644 --- a/lib/resource-1.0/spanish/IdiomSpa.gf +++ b/lib/resource-1.0/spanish/IdiomSpa.gf @@ -37,7 +37,7 @@ concrete IdiomSpa of Idiom = CatSpa ** (predV (verboV (estar_2 "estar"))) ; ImpPl1 vp = {s = - (mkImperative P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem + (mkImperative False P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem } ; } diff --git a/lib/resource-1.0/spanish/StructuralSpa.gf b/lib/resource-1.0/spanish/StructuralSpa.gf index 2d445276f..5b792ec7f 100644 --- a/lib/resource-1.0/spanish/StructuralSpa.gf +++ b/lib/resource-1.0/spanish/StructuralSpa.gf @@ -147,7 +147,7 @@ lin mkPronoun "usted" "la" "le" "usted" "su" "su" "sus" "sus" - Masc Pl P2 ; + Masc Sg P3 ; oper etConj : {s : Str ; n : Number} = {s = pre {