mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 08:58:55 -06:00
(Por,Spa) fix negative imperative
- reflexive pronoun is before the verb in the negative, not after - verb form is not the same as positive imperative, but the same as present subjunctive thanks to @inariksit for catching this bug! (Por) handle politeness better formal -> 2nd person singular (tu) informal sg -> 3rd person singular (você, conjugated correctly) informal pl -> 3rd person plural (vocês, conjugated correctly) unlike Spa, Por uses 2nd person as polite form; the PorRG thus would have no direct access to vós (second person plural), which is rather rare (in Brazilian Por, at least). colloquial speech in Brazil actually mangles both, using tu with você conjugation, etc; but this out of scope for the RGL. (Por) fix imperative - should use hyphen to bind the reflexive pronoun
This commit is contained in:
@@ -55,22 +55,31 @@ instance DiffPor of DiffRomance - [chooseTA,partAgr,vpAgrSubj,vpAgrClits] = open
|
||||
defaultPronArg ;
|
||||
|
||||
oper
|
||||
mkImperative b p vp =
|
||||
\\pol,g,n =>
|
||||
let
|
||||
pe = case b of {True => P3 ; _ => p} ;
|
||||
agr = {g = g ; n = n ; p = pe} ;
|
||||
refl = case vp.s.vtyp of {
|
||||
VRefl => <reflPron n pe Acc,True> ;
|
||||
_ => <[],False>
|
||||
} ;
|
||||
mkImperative isPol p vp =
|
||||
\\pol,g,n => case pol of {
|
||||
RPos => neg.p1 ++ imper ++ bindHyphenIf refl.isRefl ++ refl.pron
|
||||
++ bindIf hasClit ++ clit ++ compl ;
|
||||
RNeg _ => neg.p1 ++ refl.pron ++ clit ++ subj ++ compl
|
||||
} where {
|
||||
pe = case isPol of {True => P2 ; _ => P3} ;
|
||||
refl = case vp.s.vtyp of {
|
||||
VRefl => {pron = reflPron n pe Acc ; isRefl = True} ;
|
||||
_ => {pron = [] ; isRefl = False}
|
||||
} ;
|
||||
clit = vp.clit1 ++ vp.clit2 ;
|
||||
hasClit = vp.clit3.hasClit ;
|
||||
imper = vp.s.s ! vImper n pe ;
|
||||
subj = vp.s.s ! VFin (VPres Conjunct) n p ;
|
||||
neg = vp.neg ! pol ;
|
||||
agr = {g = g ; n = n ; p = pe} ;
|
||||
compl = neg.p2 ++ vp.comp ! agr ++ vp.ext ! pol
|
||||
} ;
|
||||
|
||||
clpr = <vp.clit1 ++ vp.clit2, [],vp.clit3.hasClit> ;
|
||||
verb = vp.s.s ! vImper n pe ;
|
||||
neg = vp.neg ! pol ;
|
||||
compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol
|
||||
in
|
||||
neg.p1 ++ verb ++ bindIf refl.p2 ++ refl.p1 ++ bindIf clpr.p3 ++ clpr.p1 ++ compl ;
|
||||
bindHyphenIf : Bool -> Str ;
|
||||
bindHyphenIf b = case b of {
|
||||
True => BIND ++ "-" ++ BIND ;
|
||||
_ => []
|
||||
} ;
|
||||
|
||||
param
|
||||
Copula = SerCop | EstarCop | FicarCop ;
|
||||
|
||||
@@ -112,27 +112,27 @@ instance DiffSpa of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits,contractInf] = o
|
||||
|
||||
infForm _ _ _ _ = True ;
|
||||
|
||||
mkImperative b p vp =
|
||||
\\pol,g,n =>
|
||||
let
|
||||
pe = case b of {True => P3 ; _ => p} ;
|
||||
agr = {g = g ; n = n ; p = pe} ;
|
||||
refl = case vp.s.vtyp of {
|
||||
VRefl => <reflPron n pe Acc,True> ;
|
||||
_ => <[],False>
|
||||
} ;
|
||||
|
||||
clpr = <vp.clit1 ++ vp.clit2, [],vp.clit3.hasClit> ;
|
||||
---- clpr = <[],[],False> ; ----e pronArg agr.n agr.p vp.clAcc vp.clDat ;
|
||||
----e verb = case <aag.n, pol,pe> of {
|
||||
----e <Sg,Neg,P2> => (vp.s ! VPInfinit Simul clpr.p3).inf ! aag ;
|
||||
----e _ => (vp.s ! VPImperat).fin ! agr
|
||||
----e } ;
|
||||
verb = vp.s.s ! vImper n pe ;
|
||||
neg = vp.neg ! pol ;
|
||||
compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol
|
||||
in
|
||||
neg.p1 ++ verb ++ bindIf refl.p2 ++ refl.p1 ++ bindIf clpr.p3 ++ clpr.p1 ++ compl ;
|
||||
mkImperative isPol p vp =
|
||||
\\pol,g,n => case pol of {
|
||||
RPos => neg.p1 ++ imper ++ bindIf refl.isRefl ++ refl.pron
|
||||
++ bindIf hasClit ++ clit ++ compl ;
|
||||
RNeg _ => neg.p1 ++ refl.pron ++ clit ++ subj ++ compl
|
||||
} where {
|
||||
pe = case isPol of {True => P3 ; _ => p} ;
|
||||
refl = case vp.s.vtyp of {
|
||||
VRefl => {pron = reflPron n pe Acc ; isRefl = True} ;
|
||||
_ => {pron = [] ; isRefl = False}
|
||||
} ;
|
||||
clit = vp.clit1 ++ vp.clit2 ;
|
||||
hasClit = vp.clit3.hasClit ;
|
||||
imper = vp.s.s ! vImper n pe ;
|
||||
subj = vp.s.s ! VFin (VPres Conjunct) n pe ;
|
||||
neg = vp.neg ! pol ;
|
||||
agr = {g = g ; n = n ; p = pe} ;
|
||||
compl = neg.p2 ++ vp.comp ! agr ++ vp.ext ! pol
|
||||
} ;
|
||||
|
||||
|
||||
CopulaType = Bool ;
|
||||
selectCopula = \isEstar -> case isEstar of {True => estar_V ; False => copula} ;
|
||||
|
||||
Reference in New Issue
Block a user