(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:
odanoburu
2019-02-05 12:04:07 -02:00
parent 28a9453750
commit 2679717852
2 changed files with 44 additions and 35 deletions

View File

@@ -55,22 +55,31 @@ instance DiffPor of DiffRomance - [chooseTA,partAgr,vpAgrSubj,vpAgrClits] = open
defaultPronArg ; defaultPronArg ;
oper oper
mkImperative b p vp = mkImperative isPol p vp =
\\pol,g,n => \\pol,g,n => case pol of {
let RPos => neg.p1 ++ imper ++ bindHyphenIf refl.isRefl ++ refl.pron
pe = case b of {True => P3 ; _ => p} ; ++ bindIf hasClit ++ clit ++ compl ;
agr = {g = g ; n = n ; p = pe} ; RNeg _ => neg.p1 ++ refl.pron ++ clit ++ subj ++ compl
refl = case vp.s.vtyp of { } where {
VRefl => <reflPron n pe Acc,True> ; pe = case isPol of {True => P2 ; _ => P3} ;
_ => <[],False> 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> ; bindHyphenIf : Bool -> Str ;
verb = vp.s.s ! vImper n pe ; bindHyphenIf b = case b of {
neg = vp.neg ! pol ; True => BIND ++ "-" ++ BIND ;
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 ;
param param
Copula = SerCop | EstarCop | FicarCop ; Copula = SerCop | EstarCop | FicarCop ;

View File

@@ -112,27 +112,27 @@ instance DiffSpa of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits,contractInf] = o
infForm _ _ _ _ = True ; 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> ; mkImperative isPol p vp =
---- clpr = <[],[],False> ; ----e pronArg agr.n agr.p vp.clAcc vp.clDat ; \\pol,g,n => case pol of {
----e verb = case <aag.n, pol,pe> of { RPos => neg.p1 ++ imper ++ bindIf refl.isRefl ++ refl.pron
----e <Sg,Neg,P2> => (vp.s ! VPInfinit Simul clpr.p3).inf ! aag ; ++ bindIf hasClit ++ clit ++ compl ;
----e _ => (vp.s ! VPImperat).fin ! agr RNeg _ => neg.p1 ++ refl.pron ++ clit ++ subj ++ compl
----e } ; } where {
verb = vp.s.s ! vImper n pe ; pe = case isPol of {True => P3 ; _ => p} ;
neg = vp.neg ! pol ; refl = case vp.s.vtyp of {
compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol VRefl => {pron = reflPron n pe Acc ; isRefl = True} ;
in _ => {pron = [] ; isRefl = False}
neg.p1 ++ verb ++ bindIf refl.p2 ++ refl.p1 ++ bindIf clpr.p3 ++ clpr.p1 ++ compl ; } ;
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 ; CopulaType = Bool ;
selectCopula = \isEstar -> case isEstar of {True => estar_V ; False => copula} ; selectCopula = \isEstar -> case isEstar of {True => estar_V ; False => copula} ;