Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -1264,11 +1264,11 @@ ### ce / cet / cette / ces + nom + là __[i]/tu(tu_ce_cette_ces_nom_là1)__ c(?:e[st]?|ette) (({w_2}) là)(?! où) @@$,w <<- morph(\2, ":[NB]", False) -1>> \2-là # Il manque probablement un trait d’union. __[i]/tu(tu_ce_cette_ces_nom_là2)__ - c(?:e[st]?|ette) (({w_2}) la) @@$,w <<- morph(\2, ":[NB]", False) and not word(1) -1>> \2-là # Il manque probablement un trait d’union. + c(?:e[st]?|ette) (({w_2}) la) @@$,w <<- morph(\2, ":[NB]", False) and isEnd() -1>> \2-là # Il manque probablement un trait d’union. TEST: Ces {{trois là}} sont incollables. TEST: Je connais bien cette {{sensation là}}. TEST: Laisse ce chiot là où il est ! @@ -1367,11 +1367,11 @@ __[i]/tu(tu_ici_bas)__ ici bas <<- ->> ici-bas # Il manque un trait d’union. __[i]/tu(tu_jusque_là)__ jusque là <<- ->> jusque-là # Il manque un trait d’union. __[i]/tu(tu_là_adverbe)__ là (bas|haut|desso?us|dedans|devant|derrière) @@3 <<- ->> là-\1 # Il manque un trait d’union. __[i]/tu(tu_n_est_ce_pas)__ n’est(?: ce[ -]pas|-ce-pas) <<- ->> n’est-ce pas # Un trait d’union. __[i]/tu(tu_nord_sud_ouest)__ (nord|sud) ouest @@0 <<- ->> \1-ouest # Il manque un trait d’union. -__[i]/tu(tu_nord_sud_est)__ (nord|sud) est @@0 <<- not word(1) ->> \1-est # Il manque un trait d’union. +__[i]/tu(tu_nord_sud_est)__ (nord|sud) est @@0 <<- isEnd() ->> \1-est # Il manque un trait d’union. __[i]/tu(tu_outre_mer)__ outre mer <<- ->> outre-mer # Il manque un trait d’union. __[i]/tu(tu_ouï_dire)__ ou[iï] dire <<- morph(word(-1), ":G") ->> ouï-dire # Il manque un trait d’union. __[i]/tu(tu_par_préposition)__ par (desso?us|devant|delà|derrière|dehors|dedans|devers) @@$ <<- ->> par-\1 # Il manque un trait d’union. @@ -1592,11 +1592,11 @@ # Dialogues __[u]/virg(virgule_dialogue_après_nom_propre)__ ([A-ZÉÈ][\w-]+) (\w+-(?:moi|toi|l(?:ui|a|e(?:ur|s|))|nous|vous|je|tu|ils|elles)) @@0,$ - <<- morphex(\1, ":M", ":G") and not morph(\2, ":N", False) and not word(-1) + <<- morphex(\1, ":M", ":G") and not morph(\2, ":N", False) and isStart() -1>> \1, # Dialogue ? Ajoutez une virgule pour mettre en incise la personne à qui s’adresse la réplique. TEST: {{Maria}} donnez-vous du temps ? TEST: {{Marion}} passe-moi le sel. TEST: {{Paul}} prends-lui la main. @@ -1955,11 +1955,11 @@ TEST: __ocr__ ce petit {{rut}} traité comme un chien # il / n __[s]/ocr(ocr_il)__ (n )([bcdfghjklmnpqrstvwxz][\w-]+) @@0,$ - <<- not word(-1) and morph(\2, ":(?:O[on]|3s)", False) -1>> "il " # Erreur de numérisation ? + <<- isStart() and morph(\2, ":(?:O[on]|3s)", False) -1>> "il " # Erreur de numérisation ? TEST: __ocr__ {{n }}contient trop de soufre. # il / ils / U / Us @@ -2745,11 +2745,11 @@ TEST: Belle qui tient mon vit captif entre tes doigts. __[i]/conf(conf_ton_son_verbe)__ [st]on ({w_2}) @@4 - <<- morph(\1, ":V.*:(?:Y|[123][sp])") and \1[0].islower() and not word(-1) + <<- morph(\1, ":V.*:(?:Y|[123][sp])") and \1[0].islower() and isStart() -1>> =suggSimil(\1, ":[NA]:[me]:[si]") # Incohérence : « \1 » est un verbe. TEST: ton {{recèle}} a été dévoilé @@ -2946,11 +2946,11 @@ # a / à __[i]/conf(conf_a_à_tout_à_fait)__ tout (a) fait @@5 <<- -1>> à # Confusion. __[i]/conf(conf_a_à_jusqu_à)__ jusqu (a) @@6 <<- -1>> à # Confusion. __[i]/conf(conf_a_à_grâce_à)__ grâce (a) @@6 <<- morph(word(-1), ":[VN]", False, True) -1>> à # Confusion probable. -__[i]/conf(conf_a_à_moins_que)__ (a) moins que? @@0 <<- not word(-1) -1>> à # Confusion probable : « à moins que » pour dire « sauf si ». +__[i]/conf(conf_a_à_moins_que)__ (a) moins que? @@0 <<- isStart() -1>> à # Confusion probable : « à moins que » pour dire « sauf si ». __[i]/conf(conf_a_à_tout_à_coup)__ tout h?ah? co[uû][pt]? <<- ->> tout à coup # Confusion. __[i]/conf(conf_a_à_coup_sûr)__ a coup s[uû]r <<- ->> à coup sûr # Confusion. __[i]/conf(conf_a_à_face_à)__ face (a) @@5 <<- not before(r"(?i)\b(?:[lmts]a|leur|une|en) +$") -1>> à # Confusion. __[i]/conf(conf_a_à_pas_à_pas)__ pas (a) pas @@4 <<- -1>> à # Confusion. __[i]/conf(conf_a_à_par_rapport)__ par rapport (a) ({w_2}) @@12,$ <<- morph(\2, ":(?:D|Oo|M)", False) -1>> à # Confusion. @@ -3124,11 +3124,11 @@ # au temps / autant __[i]/conf(conf_au_temps_pour_moi)__ (au ?tant?) pour moi @@0 - <<- not word(-1) -1>> au temps # Pour reconnaître son erreur, « au temps pour moi » est l’expression recommandée par l’Académie française. + <<- isStart() -1>> au temps # Pour reconnaître son erreur, « au temps pour moi » est l’expression recommandée par l’Académie française. __[i]/conf(conf_autant_que_faire_se_peut)__ au t(?:emps|ant?) que f(?:aire|erre|ers?) [sc]e peu[xt]? <<- ->> autant que faire se peut # Locution adverbiale : « autant que faire se peut ».|https://fr.wiktionary.org/wiki/autant_que_faire_se_peut TEST: Je me suis trompé. {{Autant}} pour moi. @@ -3263,11 +3263,11 @@ # d’en / dans __[i]/conf(conf_dans1)__ (d’en|dan) (?:l(?:es?|a)|une?|d(?:es?|u)|[mts](?:on|a|es)|[nv]o(?:tre|s)|ce(?:tte|t|s|)) @@0 - <<- \1.endswith("en") or before("^ *$") -1>> dans # Confusion. Utilisez “dans” pour dire “à l’intérieur de quelque chose”. + <<- \1.endswith("en") or isRealStart() -1>> dans # Confusion. Utilisez “dans” pour dire “à l’intérieur de quelque chose”. __[i]/conf(conf_dans2)__ ^ *(dents?) (?:l(?:es?|a)|une?|[mts](?:on|a|es)|[nv]o(?:tre|s)|ce(?:tte|t|s|)) @@* <<- -1>> dans # Confusion. Utilisez “dans” pour dire “à l’intérieur de quelque chose”. TEST: {{dan}} la voiture @@ -3338,11 +3338,11 @@ # eh bien, hé bien / et bien __[i]/conf(conf_eh_bien)__ et bien(?! que?| sûr| d’autres| entendu| avant| souvent| longtemps| des| moins| plus| au-delà) - <<- not word(-1) and not morph(word(1), ":[WAY]", False, False) + <<- isStart() and not morph(word(1), ":[WAY]", False, False) ->> eh bien|hé bien # Confusion probable.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?T1=h%C3%A9&T3.x=0&T3.y=0 __[i]/conf(conf_eh_ben)__ et (ben) @@3 <<- not \1.startswith("B") ->> eh ben|hé ben # Confusion probable.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?T1=h%C3%A9&T3.x=0&T3.y=0 @@ -3620,14 +3620,14 @@ TEST: Vous n’êtes pas sans {{ignorer}} que… ## s’en / sens / sans / cent / cens __[i]/conf(conf_il_on_s_en)__ (?:ils?|on) (san[sg]|cen[st]|c’en) ({w_2}) @@w,$ - <<- not word(-1) and morph(\2, ":V", False) + <<- isStart() and morph(\2, ":V", False) -1>> s’en # Confusion probable. __[i]/conf(conf_elle_s_en)__ elles? (san[sg]|cen[st]|c’en) ({w_2}) @@w,$ - <<- not word(-1) and morph(\2, ":V", False) and not ( \1 == "sans" and morph(\2, ":[NY]", False) ) + <<- isStart() and morph(\2, ":V", False) and not ( \1 == "sans" and morph(\2, ":[NY]", False) ) -1>> s’en # Confusion probable. TEST: il {{c’en}} est vite lassé. TEST: {{S’en}} était vraiment trop ! TEST: Car {{s’en}} était vraiment fini ! @@ -3838,11 +3838,11 @@ <<- ( morph(\0, ":1s") or ( before("> +$") and morph(\0, ":1s", False) ) ) and not (\0[0:1].isupper() and before0(r"\w")) and not before(r"(?i)\b(?:j(?:e |[’'])|moi(?:,? qui| seul) )") ->> =suggVerb(@, ":3s") # Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable. __[i]/conj(conj_xxxes_sans_sujet)!3__ \w*es(?! tu) - <<- morphex(\0, ":2s", ":(?:E|G|W|M|J|[13][sp]|2p)") and not \0[0:1].isupper() and not before("^ *$") + <<- morphex(\0, ":2s", ":(?:E|G|W|M|J|[13][sp]|2p)") and not \0[0:1].isupper() and not isRealStart() and ( not morph(\0, ":[NAQ]", False) or before("> +$") ) and not before(r"(?i)\bt(?:u |[’']|oi,? qui |oi seul )") ->> =suggVerb(@, ":3s") # Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable. __[i]/conj(conj_xxxas_sans_sujet)!3__ \w+as(?! tu) @@ -3931,11 +3931,11 @@ (?:[ldmtsc]es|[nv]os|leurs|aux) (tout) ({w_2}) @@w,$ <<- morph(\2, ":[AQ].*:[pi]", False) ~1>> * __[i]/gn(gn_tous_deux)__ - (tout) deux @@0 <<- not word(-1) -1>> tous # Locution pronominale : « tous deux ».|https://fr.wiktionary.org/wiki/tous_deux + (tout) deux @@0 <<- isStart() -1>> tous # Locution pronominale : « tous deux ».|https://fr.wiktionary.org/wiki/tous_deux TEST: {{Tout}} deux sont partis les premiers. __[i]/gn(gn_tous_déterminant_pluriel)__ @@ -4241,11 +4241,11 @@ __[i](p_oh_ah_euh_eh_bien)__ (?:oh|ah|euh|eh bien) <<- ~>> * __[i](p_ex_loc_latine)__ ex (?:nihilo|cathedra|absurdo|abrupto) <<- ~>> * __[i](p_face_à_face)__ face à face <<- ~>> * __[i](p_nombre_fois_de_suite)__ (?:deux|trois|quatre|cinq|six|sept|huit|neuf|dix|onze|douze|treize|quatorze|quinze|seize|vingt|trente|quarante|cinquante|soixante|cent) fois de suite <<- ~>> * __[i](p_grosso_modo)__ grosso modo <<- ~>> * -__[i](p_grand_bien_lui_fasse)__ grand bien lui fasse <<- not word(-1) ~>> * +__[i](p_grand_bien_lui_fasse)__ grand bien lui fasse <<- isStart() ~>> * __[i](p_hier)__ (?:avant-|)hier(?: matin| soir| après-midi|) <<- ~>> * __[i](p_hors_de_qqch)__ hors (?:de (?:contrôle|portée)|d’(?:atteinte|état de nuire)|du commun) <<- ~>> * __[i](p_ici_qqch)__ ici(?: comme ailleurs| ou ailleurs| et (?:là|maintenant)| même|-bas) <<- ~>> * __[i](p_id_est)__ id est <<- ~>> * __[i](p_il_y_a_qqch)__ il y a (?:longtemps|peu de temps|très (?:longtemps|peu de temps)|(?:quelques|moins de \d+|\d+) (?:secondes|minutes|heures|jours|semaines|mois|an(?:née|)s|siècles|millénaires)|quelque temps) <<- ~>> * @@ -4753,11 +4753,11 @@ ## Seconde passe (il faut réorganiser tout le cycle de simplification) __[i](p_à_nos_yeux)__ (à (?:[mts]es|[nv]os|leurs) yeux) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[pi]", False) ~1>> * __[i](p_ben_voyons)__ - ben voyons <<- not word(-1) ~>> * + ben voyons <<- isStart() ~>> * __[i](p_chaque_année_semaine_journée_décennie)__ (chaque (?:année|semaine|journée|décennie)) +({w_1}) @@0,$ <<- not morph(\2, ":(?:A.*:[fe]:[si]|Oo|[123][sp])", False) ~1>> * __[i](p_chaque_an_jour_mois)__ (chaque (?:an|jour|mois)) +({w_1}) @@0,$ <<- not morph(\2, ":(?:A.*:[me]:[si]|Oo|[123][sp])", False) ~1>> * __[i](p_dans_l_ensemble)__ @@ -4869,11 +4869,11 @@ (?:d(?:es? |’)|[mts](?:es|on|a) |ce(?:s|t(?:te|)|rtaine?s|) |[nv](?:otre|os) |leurs |quelques ) *({w_2})( ) *({w_2}) @@w,**,$ <<- isAmbiguousNAV(\3) and morphex(\1, ":[NAQ]", ">telle ") and not re.search("^[dD](?:’une?|e l(?:a|eur)) ", \0) ~2>> ~ __[i](p_astuce_désambiguïsation3)__ l(?:es? |a |’|eur ) *({w_2})( ) *({w_2}) @@w,**,$ - <<- isAmbiguousNAV(\3) and ( morphex(\1, ":[NAQ]", ":V0a") or (morphex(\1, ":[NAQ]", ":(?:3[sp]|V0a)") and not word(-1)) ) + <<- isAmbiguousNAV(\3) and ( morphex(\1, ":[NAQ]", ":V0a") or (morphex(\1, ":[NAQ]", ":(?:3[sp]|V0a)") and isStart()) ) ~2>> ~ TEST: comme le signe évident d’une politique volontaire TEST: c’était le signe évident d’une politique volontaire TEST: ce que c’est : le signe évident d’une politique volontaire @@ -5952,15 +5952,15 @@ <<- -1>> \2 # Considéré comme préposition, invariable. __> \2 # Considéré comme préposition, invariable. __[i]/sgpl(sgpl_prep_attendu_que)__ - (attendu(?:es?|s)) que? @@0 <<- not word(-1) -1>> attendu # Considéré comme préposition, invariable. + (attendu(?:es?|s)) que? @@0 <<- isStart() -1>> attendu # Considéré comme préposition, invariable. __[i]/sgpl(sgpl_prep_étant_donné)__ - étant donné(?:es?|s) <<- not word(-1) ->> étant donné # Considéré comme préposition, invariable. + étant donné(?:es?|s) <<- isStart() ->> étant donné # Considéré comme préposition, invariable. __[i]/sgpl(sgpl_prep_vu_det)__ - (vu(?:es?|s)) (?:[lc]es?|la|cette|leurs?|que?) @@0 <<- not word(-1) -1>> vu # Considéré comme préposition, invariable. + (vu(?:es?|s)) (?:[lc]es?|la|cette|leurs?|que?) @@0 <<- isStart() -1>> vu # Considéré comme préposition, invariable. TEST: {{comprises}} mes prestations sur place TEST: {{Exceptés}} les petits, tous sont tombes malades. TEST: {{Attendues}} qu’on n’en sait rien, impossible de tirer des conclusions définitives. TEST: Il viendra, {{étant donnée}} son addiction… @@ -6317,11 +6317,11 @@ ############################## CONFUSIONS, HOMONYMES ET FAUX-AMIS ############################### # abuser / abusé / abusif __[i]/conf(conf_abusif)__ c’est +(abus(?:é|er)) @@$ - <<- not word(1) -1>> abusif # Confusion. Concernant les actes, on parle de pratiques abusives. On abuse des choses ou des personnes. + <<- isEnd() -1>> abusif # Confusion. Concernant les actes, on parle de pratiques abusives. On abuse des choses ou des personnes. TEST: C’est {{abusé}} ! # acre / âcre @@ -7071,11 +7071,11 @@ ## on / ont __[i>/conf(conf_on1)__ (ont) [nmts]’(?!(?:ils?|elles?)) @@0 - <<- not word(-1) -1>> on # Confusion probable : “ont” est une conjugaison du verbe avoir. + <<- isStart() -1>> on # Confusion probable : “ont” est une conjugaison du verbe avoir. TEST: {{ont}} m’assure qu’il n’y en a pas. TEST: {{Ont}} n’arrive pas à s’en sortir. @@ -7094,11 +7094,11 @@ __[i]/conf(conf_on3)__ (ont) (?:l(?:ui|eur)|[nv]ous) ({w_2}) @@0,$ <<- morphex(\2, ":V.*:(?:[1-3][sp])", ":(?:G|1p)") - and not ( \0.find(" leur ") and morph(\2, ":[NA].*:[si]", False) ) and not word(-1) + and not ( \0.find(" leur ") and morph(\2, ":[NA].*:[si]", False) ) and isStart() -1>> on # Confusion probable : “ont” est une conjugaison du verbe avoir. TEST: {{Ont}} lui avait donné du temps TEST: {{Ont}} leur prendra tout TEST: Qu’importe, {{ont}} leur prend tout @@ -7330,11 +7330,11 @@ TEST: de {{quoique}} ce soit, je ne veux pas en entendre parler. # quoiqu’il en coûte __[i]/conf(conf_quoi_qu_il_en_coûte)__ - (quoiqu il) en (?:co[uû]te) @@0 <<- not word(1) -1>> quoi qu’il # Confusion probable. + (quoiqu il) en (?:co[uû]te) @@0 <<- isEnd() -1>> quoi qu’il # Confusion probable. TEST: Elle y parviendra, {{quoiqu’il}} en coûte. # raisonner / résonner @@ -7449,14 +7449,14 @@ TEST: Quoi qu’il en soit __[i]/conf(conf_soit1)__ (soie?s?) ({w_2}) @@0,$ - <<- not word(-1) and morphex(\2, ":[OC]", ":R") -1>> soit # Confusion probable : pour évoquer une option, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction + <<- isStart() and morphex(\2, ":[OC]", ":R") -1>> soit # Confusion probable : pour évoquer une option, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction __[i]/conf(conf_soit2)__ (soie?s?) [jtcç]’ @@0 - <<- not word(-1) -1>> soit # Confusion probable : pour évoquer une option, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction + <<- isStart() -1>> soit # Confusion probable : pour évoquer une option, écrivez “soit”.|https://fr.wiktionary.org/wiki/soit#Conjonction TEST: {{soi}} je vais au cinéma, {{soi}} je m’abstiens. TEST: {{soie}} j’arrive avant tout le monde. @@ -8020,11 +8020,11 @@ <<- morph(\1, ":[NAQ]", False) and isEndOfNG() ~>> * ## doute que __[i](p_nul_doute_que)__ - nul doute qu <<- not word(-1) ~>> * + nul doute qu <<- isStart() ~>> * __[i](p_douter_que)__ (dout\w+)( ) *que? @@0,* <<- morph(\1, ">douter ", False) and before(r"(?i)\b(?:[mts]e|[nv]ous) +$") ~2>> , ## de + __[i](p_de_nom)__ @@ -8130,11 +8130,11 @@ __[i]/conf(conf_c_en_être)__ (s’en) (?:n’|)(?:est|seras?|étai[ts]) +({w_2}) @@0,$ <<- re.search("(?i)^(?:fini|terminé)s?", \2) and morph(word(-1), ":C", False, True) -1>> c’en # Confusion probable. « C’en est… » équivaut à « ça, c’est… ».|http://fr.wiktionary.org/wiki/c%E2%80%99en_est_fait_de - <<- re.search("(?i)^(?:assez|trop)$", \2) and (after("^ +d(?:e |’)") or not word(1)) + <<- re.search("(?i)^(?:assez|trop)$", \2) and (after("^ +d(?:e |’)") or isEnd()) -1>> c’en # Confusion probable. « C’en est… » équivaut à « ça, c’est… ».|http://fr.wiktionary.org/wiki/c%E2%80%99en_est_fait_de <<- morphex(\2, ":A", ":[GVW]") and morph(word(-1), ":C", False, True) -1>> c’en # Confusion probable : “\2” est un adjectif. « C’en est… » équivaut à « ça, c’est… ».3|http://fr.wiktionary.org/wiki/c%E2%80%99en_est_fait_de @@ -9258,11 +9258,11 @@ TEST: Vous {{arrivais}} trop tard. __[i]/conj(conj_vous_verbe2)__ vous [nm](?:e +(?:les? |l’|la |[nv]ous |)|’)({w_3}) @@$ - <<- morphex(\1, ":V", ":2p") and not word(-1) -1>> =suggVerb(@, ":2p") # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel. + <<- morphex(\1, ":V", ":2p") and isStart() -1>> =suggVerb(@, ":2p") # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel. TEST: vous ne l’{{avait}} pas vu. TEST: je crois, vous m’{{avais}} trompé… @@ -9314,11 +9314,11 @@ # Confusions __[i]/imp(imp_confusion_2e_pers_pluriel)__ ({w_2}(?:er|ai[st]|ée?s?)) moi @@0 - <<- morph(\1, ":V", False) and not word(-1) + <<- morph(\1, ":V", False) and isStart() ->> =suggVerbTense(\1, ":E", ":2p") + "-moi" # Confusion probable. Pour l’impératif, écrivez : TEST: {{Donner moi}} une chance TEST: je vous en prie, {{prenais moi}} avec vous. TEST: {{avançait moi}} de l’argent @@ -9540,11 +9540,11 @@ __[i]/imp(imp_union_aller_y)!5__ (?:v(?:iens|enez|enons)|all(?:ons|ez)) y <<- not morph(word(1), ":Y", False, False) ->> =\0.replace(" ", "-") # Il manque un trait d’union. __[i]/imp(imp_union_vas_y)!5__ vas? y - <<- not word(-1) and not morph(word(1), ":Y", False, False) ->> vas-y # Il manque un trait d’union. + <<- isStart() and not morph(word(1), ":Y", False, False) ->> vas-y # Il manque un trait d’union. __[i]/imp(imp_union_convenir_en)__ conv(?:iens|enez|enons) en(?! partie) <<- ->> =\0.replace(" ", "-") # Il manque un trait d’union. TEST: {{allons y}}, ça pue. TEST: {{vas y}}, ce n’est pas dangereux @@ -9585,11 +9585,11 @@ __[s](p_pro_per_obj22)__ [lL]’a <<- ~>> > a __[i](p_pro_per_obj23)__ (nous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|1p)") ~1>> > __[i](p_pro_per_obj24)__ (vous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|2p)") ~1>> > __[i](p_pro_per_obj25)__ (?:à|de) ([nv]ous|lui|les?|en)(?! qui) @@$ <<- ~1>> > __[i](p_pro_per_obj26)__ (s’)({w4}) @@0,2 <<- morph(\2, ":V", False) ~1>> > -__[i](p_pro_per_obj27)__ (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +){w_2} @@* <<- not word(-1) ~1>> > +__[i](p_pro_per_obj27)__ (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +){w_2} @@* <<- isStart() ~1>> > __[i](p_pro_per_obj28)__ (?:je|tu|ils?|elles?|on|[nv]ous|ce(?:ux|elles?|lui|la|) qui) (l’)({w4}) @@*,$ <<- morph(\2, ":V", False) ~1>> > __[i](p_pro_per_obj29)__ (t’(?:en|y)) ({w_2}) @@0,$ <<- not morph(\2, ":2s", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> > __[i](p_pro_per_obj30)__ (t’)({w_2}) @@0,$ <<- not morph(\2, ":2s|>(ils?|elles?|on) ", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> > __[i>(p_pro_per_obj31)__ ne [mtsl]’ <<- ~>> > __[i>(p_pro_per_obj32)__ [mts]e +l’ <<- ~>> > @@ -10060,11 +10060,11 @@ and not (before(r"(?i)\b(?:et|ou) +$") and morph(\3, ":(?:[123]p|p)", False)) and not before(r"(?i)\bni .* ni\b") -3>> =suggVerb(@, ":3s", suggSing) # Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. __[i]/conj(conj_det_nom_ambiguïté2)__ (l(?:e(?:ur|) |a |’)) *({w_2})~ *({w_2}) @@0,w,$ - <<- morphex(word(-1), ":C", ":(?:Y|P)", True) and isVeryAmbiguousAndWrong(\2, \3, ":s", ":3s", not word(-1)) + <<- morphex(word(-1), ":C", ":(?:Y|P)", True) and isVeryAmbiguousAndWrong(\2, \3, ":s", ":3s", isStart()) and not (before(r"(?i)\b(?:et|ou) +$") and morph(\3, ":(?:[123]p|p)", False)) and not before(r"(?i)\bni .* ni\b") -3>> =suggVerb(@, ":3s", suggSing) # Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. TEST: mon chat {{sautes}} TEST: cette fille {{bouffes}} comme mille @@ -10264,11 +10264,11 @@ TEST: vos filles {{passes}} ce matin __[i]/conj(conj_les_nom_ambiguïté)__ les +({w_2})~ *({w_2}) @@w,$ - <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":p", ":3p", not word(-1)) + <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":p", ":3p", isStart()) -2>> =suggVerb(@, ":3p", suggPlur) # Accord avec « les \1… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. TEST: les grands {{danse}} TEST: les filles {{passes}} ce matin TEST: les marchands {{marche}} @@ -10282,19 +10282,19 @@ TEST: les chattes {{danse}} __[i]/conj(conj_certains_nom_ambiguïté)__ certains +({w_2})~ *({w_2}) @@w,$ - <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":m:p", ":3p", not word(-1)) + <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":m:p", ":3p", isStart()) -2>> =suggVerb(@, ":3p", suggMasPlur) # Accord avec « certains \1… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. TEST: certains hommes {{marchandes}} sans cesse __[i]/conj(conj_certaines_nom_ambiguïté)__ certaines +({w_2})~ *({w_2}) @@w,$ - <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":f:p", ":3p", not word(-1)) + <<- morphex(word(-1), ":C", ":[YP]", True) and isVeryAmbiguousAndWrong(\1, \2, ":f:p", ":3p", isStart()) -2>> =suggVerb(@, ":3p", suggFemPlur) # Accord avec « certaines \1… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. TEST: certaines femmes {{danse}} beaucoup @@ -10414,11 +10414,11 @@ TEST: peu importe ce que tu crois du lieu où l’{{abandonnerais}} ce salopard… __[i]/conj(conj_puisse)__ (puisses?) ({w_2}) @@0,$ - <<- not word(-1) >>> + <<- isStart() >>> <<- morph(\2, ":D.*:p", False) -1>> puissent # Conjugaison erronée. Ce verbe devrait s’accorder au substantif qui le suit. <<- __else__ and \1.endswith("s") and \2 != "tu" and not before(r"(?i)\btu ") -1>> puisse # Conjugaison erronée. Sujet “tu” introuvable. TEST: {{puisse}} les hommes enfin comprendre leurs erreurs. ->> puissent @@ -10589,15 +10589,15 @@ # Si suivi du conditionnel ou du subjonctif __[i]/vmode(vmode_si_sujet1)__ si +({w1}) +>? *({w_2}) @@w,$ - <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":[SK]", ":(?:G|V0|I)") and not word(-1) + <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":[SK]", ":(?:G|V0|I)") and isStart() -2>> _ # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif. __[i]/vmode(vmode_si_sujet2)__ (?:si [jt]’|s’ils? )>? *({w_2}) @@$ - <<- morphex(\1, ":[SK]", ":(?:G|V0|I)") and not word(-1) + <<- morphex(\1, ":[SK]", ":(?:G|V0|I)") and isStart() -1>> _ # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif. TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer. TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.