Index: compile_rules_graph.py ================================================================== --- compile_rules_graph.py +++ compile_rules_graph.py @@ -38,14 +38,14 @@ sCode = sCode.replace("__also__", "bCondMemo") sCode = sCode.replace("__else__", "not bCondMemo") sCode = sCode.replace("sContext", "_sAppContext") sCode = re.sub(r"\b(morph|morphVC|analyse|value|tag|meta|info)[(]\\(\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode) sCode = re.sub(r"\b(morph|morphVC|analyse|value|tag|meta|info)[(]\\-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode) - sCode = re.sub(r"\b(select|exclude|define|define_from|rewrite|add_morph|change_meta)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode) - sCode = re.sub(r"\b(select|exclude|define|define_from|rewrite|add_morph|change_meta)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode) - sCode = re.sub(r"\b(tag_before|tag_after)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2], dTags', sCode) - sCode = re.sub(r"\b(tag_before|tag_after)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1], dTags', sCode) + sCode = re.sub(r"\b(select|exclude|define|definefrom|rewrite|addmorph|setmeta)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode) + sCode = re.sub(r"\b(select|exclude|define|definefrom|rewrite|addmorph|setmeta)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode) + sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2], dTags', sCode) + sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1], dTags', sCode) sCode = re.sub(r"\bspace_after[(][\\](\d+)", 'g_space_between_tokens(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode) sCode = re.sub(r"\bspace_after[(][\\]-(\d+)", 'g_space_between_tokens(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode) sCode = re.sub(r"\banalyse_with_next[(][\\](\d+)", 'g_merged_analyse(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode) sCode = re.sub(r"\banalyse_with_next[(][\\]-(\d+)", 'g_merged_analyse(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode) sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(>1", 'g_\\1(lToken[nLastToken+1]', sCode) # next token Index: doc/syntax.txt ================================================================== --- doc/syntax.txt +++ doc/syntax.txt @@ -356,11 +356,11 @@ > Returns True if exists on taken the nth token. `tag_before(n, tag)` > Returns True if is found any token before the nth tag. - + `tag_after(n, tag)` > Returns True if is found any token after the nth tag. ### Functions for regex and token rules @@ -619,14 +619,14 @@ Note: All these functions ALWAYS return True. If `select()` and `exclude()` generate an empty list, nothing change. -With `define()` and `add_morph()`, you must set a list of POS tags. Example: +With `define()` and `addmorph()`, you must set a list of POS tags. Example: =>> define(\1, ["po:nom is:plur", "po:adj is:sing", "po:adv"]) - =>> add_morph(\1, ["po:adv"]) + =>> addmorph(\1, ["po:adv"]) ### Tagging **Only for token rules**. Tagging can be done with the command `/>>`. You can set one or several tags at once. Use `|` as a separator. @@ -667,13 +667,13 @@ Usage: `{name}` will be replaced by its definition Example: - DEF: word_3_letters \w\w\w+ + DEF: word_3_letters \w\w\w+ DEF: uppercase_token ~^[A-Z]+$ DEF: month_token [January|February|March|April|May|June|July|August|September|October|November|december] ({word_3_letters}) (\w+) <<- condition ->> suggestion && message|URL {uppercase_token} {month_token} <<- condition ->> message && message|URL Index: gc_core/js/lang_core/gc_functions.js ================================================================== --- gc_core/js/lang_core/gc_functions.js +++ gc_core/js/lang_core/gc_functions.js @@ -297,21 +297,21 @@ oToken1["lMorph"] = lMorph; } return bResult; } -function g_tag_before (oToken, dTags, sTag) { +function g_tagbefore (oToken, dTags, sTag) { if (!dTags.has(sTag)) { return false; } if (oToken["i"] > dTags.get(sTag)[0]) { return true; } return false; } -function g_tag_after (oToken, dTags, sTag) { +function g_tagafter (oToken, dTags, sTag) { if (!dTags.has(sTag)) { return false; } if (oToken["i"] < dTags.get(sTag)[1]) { return true; @@ -421,11 +421,11 @@ oToken["lMorph"] = lSelect; } return true; } -function g_add_morph (oToken, sNewMorph) { +function g_addmorph (oToken, sNewMorph) { // Disambiguation: add a morphology to a token let lMorph = (oToken.hasOwnProperty("lMorph")) ? oToken["lMorph"] : gc_engine.oSpellChecker.getMorph(oToken["sValue"]); lMorph.push(...sNewMorph.split("|")); oToken["lMorph"] = lMorph; return true; @@ -442,20 +442,20 @@ // set morphologies of , always return true oToken["lMorph"] = sMorphs.split("|"); return true; } -function g_define_from (oToken, nLeft=null, nRight=null) { +function g_definefrom (oToken, nLeft=null, nRight=null) { let sValue = oToken["sValue"]; if (nLeft !== null) { sValue = (nRight !== null) ? sValue.slice(nLeft, nRight) : sValue.slice(nLeft); } oToken["lMorph"] = gc_engine.oSpellChecker.getMorph(sValue); return true; } -function g_change_meta (oToken, sType) { +function g_setmeta (oToken, sType) { // Disambiguation: change type of token oToken["sType"] = sType; return true; } Index: gc_core/py/lang_core/gc_functions.py ================================================================== --- gc_core/py/lang_core/gc_functions.py +++ gc_core/py/lang_core/gc_functions.py @@ -246,20 +246,20 @@ if bResult and bSetMorph: dToken1["lMorph"] = lMorph return bResult -def g_tag_before (dToken, dTags, sTag): +def g_tagbefore (dToken, dTags, sTag): "returns True if is present on tokens before " if sTag not in dTags: return False if dToken["i"] > dTags[sTag][0]: return True return False -def g_tag_after (dToken, dTags, sTag): +def g_tagafter (dToken, dTags, sTag): "returns True if is present on tokens after " if sTag not in dTags: return False if dToken["i"] < dTags[sTag][1]: return True @@ -363,11 +363,11 @@ dToken["lMorph"] = lSelect #echo("DA:", dToken["sValue"], dToken["lMorph"]) return True -def g_add_morph (dToken, sNewMorph): +def g_addmorph (dToken, sNewMorph): "Disambiguation: add a morphology to a token" lMorph = dToken["lMorph"] if "lMorph" in dToken else _oSpellChecker.getMorph(dToken["sValue"]) lMorph.extend(sNewMorph.split("|")) dToken["lMorph"] = lMorph return True @@ -385,20 +385,20 @@ dToken["lMorph"] = sMorphs.split("|") #echo("DA:", dToken["sValue"], lMorph) return True -def g_define_from (dToken, nLeft=None, nRight=None): +def g_definefrom (dToken, nLeft=None, nRight=None): "Disambiguation: set morphologies of with slicing its value with and " if nLeft is not None: dToken["lMorph"] = _oSpellChecker.getMorph(dToken["sValue"][slice(nLeft, nRight)]) else: dToken["lMorph"] = _oSpellChecker.getMorph(dToken["sValue"]) return True -def g_change_meta (dToken, sType): +def g_setmeta (dToken, sType): "Disambiguation: change type of token" dToken["sType"] = sType return True Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -1860,15 +1860,15 @@ #TEST: et moi 3.000.000 de dollars __virg_après_verbe_COD__ [le|la|l’|les] $:Y¬:N $:M - <<- /virg/ not value(\2, "|appeler|") and not tag_before(\1, "_que_") and not tag_before(\1, "_comme_") + <<- /virg/ not value(\2, "|appeler|") and not tagbefore(\1, "_que_") and not tagbefore(\1, "_comme_") -2>> \2, && Si “\-1” marque le début d’une proposition, une virgule est probablement souhaitable. [le|la|l’|les] *WORD ?[cher|chère]¿ @:M[12] - <<- /virg/ morph(\2, ":[123][sp]", ">appeler/|:[NA]") and not tag_before(\1, "_que_") and not tag_before(\1, "_comme_") + <<- /virg/ morph(\2, ":[123][sp]", ">appeler/|:[NA]") and not tagbefore(\1, "_que_") and not tagbefore(\1, "_comme_") -2>> \2, && Si “\-2” est une personne apostrophée, alors il faut mettre le nom en incise.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?Th=2&t1=&id=3412 TEST: Tu vas les {{donner}} Rachel. TEST: Il va la {{tuer}} Paul. TEST: je le {{sais}} chère Paula @@ -2374,11 +2374,11 @@ sa @¬:(?:V0|3s) <<- =>> exclude(\2, ":V") les ~.es$ - <<- not value(<1, "|tu|ne|n’|me|m’|te|t’|se|s’|nous|vous|") and morph(\2, ":V1.*Ip.*:2s") and not tag_before(\1, "_2s_") and not value(>1, "|tu|pas|jamais|") + <<- not value(<1, "|tu|ne|n’|me|m’|te|t’|se|s’|nous|vous|") and morph(\2, ":V1.*Ip.*:2s") and not tagbefore(\1, "_2s_") and not value(>1, "|tu|pas|jamais|") =>> exclude(\2, ":V") [un|une] *WORD <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|fait|") and not morph(\2, ":P") =>> exclude(\2, ":V") @@ -2428,11 +2428,11 @@ __da_groupe_nominal__cas_particuliers__ [au|aux] alentour <<- =>> select(\2, ":N") avions - <<- not tag_before(\1, "_1p_") and not value(<1, "|n’|") and not value(>1, "|nous|") =>> select(\-1, ":N") + <<- not tagbefore(\1, "_1p_") and not value(<1, "|n’|") and not value(>1, "|nous|") =>> select(\-1, ":N") l’ avions <<- morph(<1, ":Y") =>> select(\-1, ":N") bac + ~^\d\d?$ @@ -2475,14 +2475,14 @@ <<- morph(\1, ":(?:D.*:p|B)") =>> exclude(\2, ":A:e:i") __da_noms_propres__ Concorde - <<- not morph(<1, ":D.*:f") =>> add_morph(\1, ">Concorde/:MP:m:i") + <<- not morph(<1, ":D.*:f") =>> addmorph(\1, ">Concorde/:MP:m:i") Mustang - <<- not morph(<1, ":D.*:m") =>> add_morph(\1, ">Mustang/:MP:f:i") + <<- not morph(<1, ":D.*:m") =>> addmorph(\1, ">Mustang/:MP:f:i") TEST: le crash du Concorde TEST: elle a acheté une Mustang @@ -2627,11 +2627,11 @@ __tag_noms__ ~\w-là$ <<- />> -là - <<- =>> =define_from(\1, 0, -3) + <<- =>> =definefrom(\1, 0, -3) ## _1M_ : première lettre majuscule ## _CAP_ : toutes capitales ## _Cap_ : première lettre capitale, les autres minuscules ~^[A-ZÀÂÉÈÊÎÏÔ] @@ -2653,17 +2653,16 @@ <<- ~>> ␣ <<- =>> define(\1, ":Cs") quelqu’ [un|une] <<- ~>> ␣ - <<- =>> change_meta(\1, "WORD") - + <<- =>> setmeta(\1, "WORD") [ [m|t|s] ] [a|on|es] [ [n|v] ] [otre|ôtre] <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) and space_after(\3, 0, 0) ~>> ␣\2\4 - <<- =>> change_meta(\1, "WORD") + <<- =>> setmeta(\1, "WORD") TEST: [s]es {{homme}} ->> hommes TEST: des effets sur [s]es états d’âme, [s]on corps @@ -2697,11 +2696,11 @@ <<- morph(<1, ":D.*:[mp]") ~>> ␣ <<- __also__ =>> define(\1, ":N:m:i") presqu’ [>ile|>île] <<- ~>> ␣ - <<- =>> change_meta(\1, "WORD") + <<- =>> setmeta(\1, "WORD") nec plus ultra terra incognita statu quo <<- ~>> ␣ @@ -4560,11 +4559,11 @@ __eleu_n_superflu__ on n’ [a|avait|eut|aura|aurait|eût] rarement <<- /eleu/ -2:3>> \3 && Adverbe de négation erroné. Rarement signifie que ça arrive, pas que ça n’arrive pas. on n’ [a|avait|eut|aura|aurait|eût] [>besoin|>chaud|>crainte|>faim|>froid|>peur|>soif] - <<- /eleu/ not tag_after(\-1, "_que_") and not value(<1, "|jamais|guère|") + <<- /eleu/ not tagafter(\-1, "_que_") and not value(<1, "|jamais|guère|") -2:3>> \3|n’\3 pas|n’\3 jamais|n’\3 plus|n’\3 guère && Adverbe de négation superflu ou manquant. TEST: on {{n’a}} rarement besoin d’avoir accès à plus de 10 logiciels. ->> a TEST: on {{n’avait}} faim. ->> avait|n’avait pas|n’avait jamais|n’avait plus|n’avait guère TEST: on n’avait peur que lorsque la tempête soufflait @@ -4905,11 +4904,11 @@ !!!! Dates !! __fusion_date__ *NUM - ~^\d\d?$ - ~^\d{2,5}$ <<- \1.isdigit() ~>> ␣ - <<- =>> change_meta(\1, "DATE") + <<- =>> setmeta(\1, "DATE") __date_jour_mois_année__ 31 [avril|juin|septembre|novembre] <<- /date/ space_after(\1, 1, 1) ->> 30 \2 && Cette date est invalide. Il n’y a que 30 jours en \2. @@ -5126,11 +5125,11 @@ [une|la|cette|cet|ma|ta|sa] pseudo @:N.*:f <<- /tu/ -2:3>> pseudo-\3 && Si vous voulez évoquer le simulacre de “\2”, mettez un trait d’union. <<- ~2>> * ~^[pP]seudo-\w+ - <<- =>> define_from(\1, 7) + <<- =>> definefrom(\1, 7) TEST: il n’avait contracté qu’un {{pseudo mariage}}. TEST: elle connaissait de {{cet}} pseudo-prêtresse uniquement de nom. TEST: la {{pseudo taxe}} carbone @@ -5986,11 +5985,11 @@ __inte_union_nous1!7__ [ne|n’] ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~ons$ nous [ne|n’] [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~ons$ nous [ne|n’] [le|la|l’|les] [lui|leur|en|y] ~ons$ nous [ne|n’] [lui|leur|y] en ~ons$ nous - <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:1p", ":[GW]") and not tag_before(\1, "_1p_") + <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:1p", ":[GW]") and not tagbefore(\1, "_1p_") --2:-1>> \-2-\-1 && Forme interrogative ? Mettez un trait d’union. , ~ons$ nous [|,|)] , ~ons$ nous @:¬:(?:1p|Y) <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|") @@ -6020,11 +6019,11 @@ __inte_union_vous1!7__ [ne|n’] ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~ez$ vous [ne|n’] [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~ez$ vous [ne|n’] [le|la|l’|les] [lui|leur|en|y] ~ez$ vous [ne|n’] [lui|leur|y] en ~ez$ vous - <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:2p", ":[GW]") and not tag_before(\1, "_2p_") + <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:2p", ":[GW]") and not tagbefore(\1, "_2p_") --2:-1>> \-2-\-1 && Forme interrogative ? Mettez un trait d’union. , ~ez$ vous [|,|)] , ~ez$ vous @:¬:(?:2p|Y) <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|") @@ -7222,25 +7221,25 @@ ## Incohérences avec formes verbales 1sg et 2sg sans sujet __conj_1s_sans_sujet_xxxai!3__ [ne|n’] ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿ ~ai$ - <<- /conj/ not tag_before(\1, "_1s_") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp])") + <<- /conj/ not tagbefore(\1, "_1s_") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp])") --1>> =suggVerb(\-1, ":3s") && Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable. [me|m’|te|t’] ?[le|la|l’|les|en|y]¿ ~ai$ [le|la|l’|les] [lui|leur|en|y] ~ai$ [lui|leur] en ~ai$ - <<- /conj/ not tag_before(\1, "_1s_") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp])") + <<- /conj/ not tagbefore(\1, "_1s_") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp])") --1>> =suggVerb(\-1, ":3s") && Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable. [nous|vous] ?[le|la|l’|les|en|y]¿ ~ai$ - <<- /conj/ not tag_before(\-1, "_1s_") and not morph(<1, ":R") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") + <<- /conj/ not tagbefore(\-1, "_1s_") and not morph(<1, ":R") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") --1>> =suggVerb(\-1, ":3s") && Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable. ~ai$ - <<- /conj/ not tag_before(\1, "_1s_") and morph(\1, ":1s", ":(?:E|G|W|M|J|3[sp]|N|A|Q)") and not (\1.istitle() and before0("\\w")) + <<- /conj/ not tagbefore(\1, "_1s_") and morph(\1, ":1s", ":(?:E|G|W|M|J|3[sp]|N|A|Q)") and not (\1.istitle() and before0("\\w")) -1>> =suggVerb(\1, ":3s") && Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable. TEST: avançait et s’{{donnai}} en spectacle TEST: il avancera, ne {{serai}} ce que de quelques pas TEST: m’{{occupai}} que deux jours, cette ânerie @@ -7249,25 +7248,25 @@ TEST: ce qui, dans le meilleur des cas, peut-être, oui, c’est vrai, vous {{donnerai}} l’avantage. __conj_2s_sans_sujet_xxxas_xxxes!3__ [ne|n’] ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿ ~[ae]s$ - <<- /conj/ not tag_before(\1, "_2s_") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|1p)") + <<- /conj/ not tagbefore(\1, "_2s_") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|1p)") --1>> =suggVerb(\-1, ":3s") && Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable. [me|m’|te|t’] ?[le|la|l’|les|en|y]¿ ~[ae]s$ [le|la|l’|les] [lui|leur|en|y] ~[ae]s$ [lui|leur] en ~[ae]s$ - <<- /conj/ not tag_before(\-1, "_2s_") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|1p)") + <<- /conj/ not tagbefore(\-1, "_2s_") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|1p)") --1>> =suggVerb(\-1, ":3s") && Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable. [nous|vous] ?[le|la|l’|les|en|y]¿ ~[ae]s$ - <<- /conj/ not tag_before(\-1, "_2s_") and not morph(<1, ":R") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") + <<- /conj/ not tagbefore(\-1, "_2s_") and not morph(<1, ":R") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") --1>> =suggVerb(\-1, ":3s") && Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable. ~..[ae]s$ - <<- /conj/ not tag_before(\1, "_2s_") and morph(\1, ":2s", ":(?:E|G|W|M|J|3[sp]|N|A|Q|1p)") and not (\1.istitle() and before0("\\w")) + <<- /conj/ not tagbefore(\1, "_2s_") and morph(\1, ":2s", ":(?:E|G|W|M|J|3[sp]|N|A|Q|1p)") and not (\1.istitle() and before0("\\w")) -1>> =suggVerb(\1, ":3s") && Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable. TEST: se {{demandes}} comment faire TEST: oui, il l’ignorait, ne me {{demandes}} comment c’était possible TEST: c’est ça, me {{demandes}} comment c’est possible @@ -7278,29 +7277,29 @@ TEST: nous laisserons derrière nous les empires de la Terre. __conj_1s_2s_sans_sujet_xxxs!3__ [ne|n’] ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿ ~[iudnrtpcï]s$ - <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") + <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") --1>> =suggVerb(\-1, ":3s") && Incohérence. Le sujet de cette forme verbale est introuvable. [me|m’|te|t’] ?[le|la|l’|les|en|y]¿ ~[iudnrtpcï]s$ [le|la|l’|les] [lui|leur|en|y] ~[iudnrtpcï]s$ [lui|leur] en ~[iudnrtpcï]s$ - <<- /conj/ not tag_before(\-1, "_1s_") and not tag_before(\-1, "_2s_") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") + <<- /conj/ not tagbefore(\-1, "_1s_") and not tagbefore(\-1, "_2s_") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") --1>> =suggVerb(\-1, ":3s") && Incohérence. Le sujet de cette forme verbale est introuvable. [nous|vous] ?[le|la|l’|les|en|y]¿ ~[iudnrtpcï]s$ - <<- /conj/ not tag_before(\-1, "_1s_") and not tag_before(\1, "_2s_") and not morph(<1, ":R") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") + <<- /conj/ not tagbefore(\-1, "_1s_") and not tagbefore(\1, "_2s_") and not morph(<1, ":R") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)") --1>> =suggVerb(\-1, ":3s") && Incohérence. Le sujet de cette forme verbale est introuvable. étais - <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") and not (\1.istitle() and before0("\\w")) and not morph(<1, ":[DA].*:p") + <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") and not (\1.istitle() and before0("\\w")) and not morph(<1, ":[DA].*:p") -1>> =suggVerb(\1, ":3s") && Incohérence. Le sujet de cette forme verbale est introuvable. ~[iudnrtpcï]s$ - <<- /conj/ not tag(\1, "eg1mot") and not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") + <<- /conj/ not tag(\1, "eg1mot") and not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") and morph(\1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p|V0e|N|A|Q)") and not (\1.istitle() and before0("\\w")) -1>> =suggVerb(\1, ":3s") && Incohérence. Le sujet de cette forme verbale est introuvable. TEST: s’{{précipitais}} dans la gueule du loup TEST: ne leur {{donnais}} aucune raison de se faire aimer @@ -7320,20 +7319,20 @@ __conj_peux_veux_vaux_équivaux_prévaux_sans_sujet!3__ [ne|n’] ?[le|la|l’|les|en|vous|lui|leur|y]¿ [peux|veux|vaux|équivaux|prévaux] [me|m’|te|t’|nous|vous] ?[le|la|l’|les|en|y]¿ [peux|veux|vaux|équivaux|prévaux] [le|la|l’|les] [lui|leur|en|y] [peux|veux|vaux|équivaux|prévaux] [lui|leur] en [peux|veux|vaux|équivaux|prévaux] - <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") + <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") --1>> =suggVerb(\-1, ":3s") && Incohérence. Le sujet de cette forme verbale est introuvable. vaux - <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") and not (\1.istitle() and before0("\\w")) + <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") and not (\1.istitle() and before0("\\w")) and not morph(<1, ":(?:R|D.*:p)") -1>> =suggVerb(\1, ":3s") && Incohérence. Le sujet de cette forme verbale est introuvable. [peux|veux|équivaux|prévaux] - <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") and not (\1.istitle() and before0("\\w")) + <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") and not (\1.istitle() and before0("\\w")) -1>> =suggVerb(\1, ":3s") && Incohérence. Le sujet de cette forme verbale est introuvable. TEST: tu sais, s’{{équivaux}}, voilà. TEST: tu sais, s’en {{veux}} d’avoir raté ça. TEST: s’{{peux}} qu’il avait faim, va savoir @@ -7347,16 +7346,16 @@ ## Incohérences avec formes verbales 1pl et 2pl sans sujet __conj_1p_sans_sujet!3__ ~ons$ - <<- /conj/ morph(\1, ":1p", ":[EGMNAJ]") and not tag_before(\1, "_1p_") and not (\1.istitle() and before0("\\w")) + <<- /conj/ morph(\1, ":1p", ":[EGMNAJ]") and not tagbefore(\1, "_1p_") and not (\1.istitle() and before0("\\w")) -1>> =suggVerb(\1, ":3p") && Ceci est un verbe à la 1ʳᵉ personne du pluriel. Sujet (“nous” ou équivalent) introuvable. __conj_2p_sans_sujet!3__ ~ez$ - <<- /conj/ morph(\1, ":2p", ":[EGMNAJ]") and not tag_before(\2, "_2p_") and not (\1.istitle() and before0("\\w")) + <<- /conj/ morph(\1, ":2p", ":[EGMNAJ]") and not tagbefore(\2, "_2p_") and not (\1.istitle() and before0("\\w")) -1>> =suggVerb(\1, ":3p") && Ceci est un verbe à la 2ᵉ personne du pluriel. Sujet (“vous” ou équivalent) introuvable. TEST: les hommes et les femmes, qui sans un bruit, sans une parole amère, {{continuerons}} leur tâche n’en seront pas plus récompensés. TEST: il était dit que cette femme et son frère {{promènerez}} leur chien à cette heure de la journée. TEST: cet homme et cette femme {{pouvez}} y parvenir avec de la persévérance @@ -7785,11 +7784,11 @@ TEST: en tant que tel __conf_presque_vconj__ presque @:[123][sp]¬:[GNAQWM] - <<- /conf/ not tag_before(\1, "_ceque_") and not value(<1, "|ou|") -2>> _ && Incohérence probable avec “presque” : « \2 » n’est ni un adjectif, ni un participe passé, ni un adverbe. + <<- /conf/ not tagbefore(\1, "_ceque_") and not value(<1, "|ou|") -2>> _ && Incohérence probable avec “presque” : « \2 » n’est ni un adjectif, ni un participe passé, ni un adverbe. TEST: presque {{délaissait}} par tout le monde. TEST: Tout le monde ou presque déteste ces gens-là. @@ -7854,11 +7853,11 @@ # [aussi|si] habile qu’il soit __conf_trop_vconj__ trop @:[123][sp]¬:(?:[GNAQWM]|3p) - <<- /conf/ not tag_before(\1, "_ceque_") -2>> _ && Incohérence probable avec “trop” : “\2” n’est ni un adjectif, ni un participe passé, ni un adverbe. + <<- /conf/ not tagbefore(\1, "_ceque_") -2>> _ && Incohérence probable avec “trop” : “\2” n’est ni un adjectif, ni un participe passé, ni un adverbe. TEST: J’ai trop {{mangeais}}. TEST: Ce que nous réussissons presque sera considéré comme un échec. @@ -10301,11 +10300,11 @@ # en fait __conf_en_fait__ en [faite|>faîte] - <<- /conf/ not value(<1, "|n’|") and not tag_before(\1, "_2p_") + <<- /conf/ not value(<1, "|n’|") and not tagbefore(\1, "_2p_") ->> en fait && Confusion probable : « en fait » qui signifie « en réalité ». Le faîte est la partie la plus élevée d’un bâtiment. TEST: {{en faite}}, on en voit partout, ça grouille. TEST: ils sont {{en faîtes}} partis à la montagne. TEST: Aujourd’hui, n’en faites pas trop. @@ -12573,11 +12572,11 @@ [|,|(] sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW] <<- /conf/ -2>> son && Confusion probable : “sont” est la forme verbale de “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”. sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW] - <<- /conf/ morph(<1, ":(?:V|Cs|R)", ":(?:[NA].*:[pi]|Ov)") and not tag_before(\1, "_ceque_") + <<- /conf/ morph(<1, ":(?:V|Cs|R)", ":(?:[NA].*:[pi]|Ov)") and not tagbefore(\1, "_ceque_") -1>> son && Confusion probable : “sont” est la forme verbale de “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”. [à|chez|dès|par] sont [avec|contre|devant|derrière|pour|sans|sur] sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW] <<- /conf/ -2>> son && Confusion probable : “sont” est la forme verbale de “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”. @@ -16816,11 +16815,11 @@ haut et fort <<- not morph(<1, ":D") ~>> * hélas - <<- not morph(<1, ":(?:X|Ov)") and not tag_before(\1, "_2s_") ~>> * + <<- not morph(<1, ":(?:X|Ov)") and not tagbefore(\1, "_2s_") ~>> * [hein|hop] <<- not morph(<1, ":D") ~>> * la lettre [a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z] @:(?:3s|Ov) @@ -19339,11 +19338,11 @@ en être [réduit+ses] a en [hommage|proie] a [m’|t’|s’] en >remettre a nous nous en >remettre a vous vous en >remettre a - <<- /conf/ \-1 != "A" and not tag_before(\1, "_àCOI_") and not value(>1, "|été|") + <<- /conf/ \-1 != "A" and not tagbefore(\1, "_àCOI_") and not value(>1, "|été|") --1>> à && Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0 [>abandonner|>accorder|>adapter|>adjoindre|>adresser|>affirmer|>agréer|>aider|>ajouter|>amener|>annoncer|>appeler|>applaudir|>appliquer|>apporter|>apprendre|>arguer|>argüer|>aspirer|>assujettir|>attacher|>atteindre|>attoucher|>attribuer|>autoriser|>avancer|>céder|>changer|>chicaner|>coller|>commander|>commencer|>conclure|>conférer|>confier|>confirmer|>conseiller|>consentir|>conspirer|>continuer|>convertir|>couper|>couter|>coûter|>croire|>décider|>déclarer|>décrire|>défendre|>déférer|>demander|>destiner|>devoir|>dire|>disposer|>disputer|>donner|>échapper|>écrire|>élever|>employer|>engager|>enjoindre|>entendre|>envoyer|>exercer|>expliquer|>exposer|>falloir|>fermer|>filer|>forfaire|>former|>fournir|>gouter|>goûter|>impartir|>imputer|>infliger|>insulter|>intégrer|>intéresser|>jeter|>justifier|>lier|>lire|>livrer|>manquer|>mesurer|>mettre|>montrer|>obliger|>obtenir|>offrir|>ouvrir|>parer|>parler|>passer|>payer|>penser|>permettre|>porter|>pourvoir|>prendre|>préparer|>prescrire|>présenter|>présider|>prétendre|>promettre|>protester|>quémander|>rappeler|>rapprendre|>ravir|>réapprendre|>recoller|>recourir|>redéclarer|>redire|>référer|>réfléchir|>refuser|>regarder|>réimputer|>remesurer|>remettre|>remontrer|>rendre|>renoncer|>reparler|>répondre|>reprendre|>répugner|>retoucher|>retravailler|>retweeter|>réussir|>révéler|>rêver|>satisfaire|>schtroumpfer|>servir|>signaler|>sonner|>soumettre|>souscrire|>soutenir|>statuer|>suppléer|>surseoir|>sursoir|>survendre|>téléphoner|>témoigner|>tendre|>tenir|>tirer|>toucher|>traduire|>travailler|>tweeter|>unir|>veiller|>vendre|>virer|>viser|>vouloir|>aboutir|>acquiescer|>adhérer|>apparaitre|>apparaître|>compatir|>complaire|>concourir|>confiner|>contribuer|>convenir|>coopérer|>correspondre|>déplaire|>désobéir|>disparaitre|>équivaloir|>mentir|>naitre|>naître|>nuire|>obéir|>obtempérer|>participer|>plaire|>profiter|>réagir|>rechigner|>renaitre|>renaître|>résister|>ressembler|>retéléphoner|>seoir|>songer|>sourire|>succéder|>succomber|>suffire|>surréagir|>survivre|>tarder|>vaquer] a >arriver a >condamner a @@ -19354,15 +19353,15 @@ >faire [barrage|barrière|confiance|écho] a >faire faux bond a >prêter serment a >rendre hommage a >rendre service a - <<- /conf/ not tag_before(\1, "_propsub_") and not morph(\1, ":[YNA]") and not value(>1, "|été|") + <<- /conf/ not tagbefore(\1, "_propsub_") and not morph(\1, ":[YNA]") and not value(>1, "|été|") --1>> à && Confusion probable : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0 @:V¬:[YGNAWM] a - <<- /conf/ \-1 != "A" and not tag(\-1, "eg1mot") and not tag_before(\1, "_propsub_") and not morph(>1, ":Q") + <<- /conf/ \-1 != "A" and not tag(\-1, "eg1mot") and not tagbefore(\1, "_propsub_") and not morph(>1, ":Q") --1>> à && Confusion probable : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0 [/_VCint_|/_VCimp_] a <<- /conf/ not value(\1, "|rendez-vous|") --1>> à && Confusion : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0 @@ -19764,11 +19763,11 @@ # bien / bine __conf_bien_bine__ bine - <<- /conf/ not tag_before(\1, "_propsub_") and morph(<1, ":V") + <<- /conf/ not tagbefore(\1, "_propsub_") and morph(<1, ":V") ->> bien && Confusion probable. Erreur de frappe ? [|,|(] bine [que|qu’|entendu|sûr] <<- /conf/ -2>> bien && Confusion probable. Erreur de frappe ? @@ -21483,11 +21482,11 @@ [me|te|le|la|nous|vous|les] prit [de|d’] [le|la|l’|les|en|nous|vous|lui|leur|y] $:Y [me|te|le|la|nous|vous|les] prit [de|d’] [nous|vous] [le|la|l’|les|en|y] $:Y [me|te|le|la|nous|vous|les] prit [de|d’] [le|la|l’|les] [lui|leur|en|y] $:Y [me|te|le|la|nous|vous|les] prit [de|d’] [lui|leur|y] en $:Y [me|te|le|la|nous|vous|les] prit [de|d’] $:Y - <<- /conf/ not tag_before(\1, "_cequi_") -2>> prie && Confusion probable. Si vous voulez dire “prier de faire quelque chose”, écrivez “prie”.|https://fr.wiktionary.org/wiki/prier + <<- /conf/ not tagbefore(\1, "_cequi_") -2>> prie && Confusion probable. Si vous voulez dire “prier de faire quelque chose”, écrivez “prie”.|https://fr.wiktionary.org/wiki/prier TEST: elle me {{prit}} d’obéir TEST: je ne sais pas ce qui me prit de lui écrire @@ -24948,11 +24947,11 @@ <<- /infi/ --1>> =suggVerbInfi(\-1) && Après “de”, le verbe devrait être à l’infinitif. [de|d’] @:V1.*:Q¬:N <<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer|qualifier)/") and not morph(\2, ">(?:fieffer|sacrer)/") and not before("(?i)(?:quelqu(?:e chose|’une?)|qu’y a-t-il |\\b(?:l(?:es?|a)|nous|vous|me|te|se) trait|personne|points? +$|autant +$|ça +|rien d(?:e |’)|rien(?: +[a-zéèêâîûù]+|) +$)") - and not tag_before(\1, "_ceque_") + and not tagbefore(\1, "_ceque_") -2>> =suggVerbInfi(\2) && Le verbe devrait être à l’infinitif. TEST: d’en {{parlé}} sans cesse TEST: cela suffit de les {{aimait}} TEST: de ne leur en {{avancé}} que le nécessaire. @@ -25322,11 +25321,11 @@ >devoir ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ai(?:s|t|ent))$ >devoir ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~..(?:ai(?:s|t|ent))$ >devoir ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~..(?:ai(?:s|t|ent))$ >devoir ?[ne|n’]¿ [lui|leur|y] en ~..(?:ai(?:s|t|ent))$ - <<- /infi/ not value(\1, "|devoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not (value(\1, "|devant|") and morph(\-1, ":N")) and not tag_before(\1, "_ceque_") + <<- /infi/ not value(\1, "|devoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not (value(\1, "|devant|") and morph(\-1, ":N")) and not tagbefore(\1, "_ceque_") --1>> =suggVerbInfi(\-1) && S’il s’agit d’une action que le sujet doit accomplir, le verbe devrait être à l’infinitif. de devoir ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~(?:ée?s?|ez|ais)$ de devoir ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~(?:ée?s?|ez|ais)$ de devoir ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~(?:ée?s?|ez|ais)$ @@ -25356,11 +25355,11 @@ >pouvoir ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ai(?:s|t|ent))$ >pouvoir ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~..(?:ai(?:s|t|ent))$ >pouvoir ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~..(?:ai(?:s|t|ent))$ >pouvoir ?[ne|n’]¿ [lui|leur|y] en ~..(?:ai(?:s|t|ent))$ - <<- /infi/ not value(\1, "|puis|pouvoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tag_before(\1, "_ceque_") + <<- /infi/ not value(\1, "|puis|pouvoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tagbefore(\1, "_ceque_") --1>> =suggVerbInfi(\-1) && S’il s’agit d’une action que le sujet peut accomplir, le verbe devrait être à l’infinitif. [de|d’] pouvoir ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~(?:ée?s?|ez|ais)$ [de|d’] pouvoir ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~(?:ée?s?|ez|ais)$ [de|d’] pouvoir ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~(?:ée?s?|ez|ais)$ @@ -25393,11 +25392,11 @@ >savoir ?[ne|n’]¿ [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y] ~..(?:ai(?:s|t|ent))$ >savoir ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~..(?:ai(?:s|t|ent))$ >savoir ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~..(?:ai(?:s|t|ent))$ >savoir ?[ne|n’]¿ [lui|leur|y] en ~..(?:ai(?:s|t|ent))$ - <<- /infi/ not value(\1, "|savoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tag_before(\1, "_ceque_") + <<- /infi/ not value(\1, "|savoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tagbefore(\1, "_ceque_") --1>> =suggVerbInfi(\-1) && S’il s’agit d’une action que le sujet sait accomplir, le verbe devrait être à l’infinitif. [de|d’] savoir ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~(?:ée?s?|ez|ais)$ [de|d’] savoir ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~(?:ée?s?|ez|ais)$ [de|d’] savoir ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~(?:ée?s?|ez|ais)$ @@ -25439,11 +25438,11 @@ >vouloir ?[ne|n’]¿ [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y] ~..(?:ai(?:s|t|ent))$ >vouloir ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~..(?:ai(?:s|t|ent))$ >vouloir ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~..(?:ai(?:s|t|ent))$ >vouloir ?[ne|n’]¿ [lui|leur|y] en ~..(?:ai(?:s|t|ent))$ - <<- /infi/ not value(\1, "|vouloirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tag_before(\1, "_ceque_") + <<- /infi/ not value(\1, "|vouloirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tagbefore(\1, "_ceque_") --1>> =suggVerbInfi(\-1) && S’il s’agit d’une action que le sujet veut accomplir, le verbe devrait être à l’infinitif. [de|d’] vouloir ?[ne|n’]¿ ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~(?:ée?s?|ez|ai[ts]?)$ [de|d’] vouloir ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~(?:ée?s?|ez|ai[ts]?)$ [de|d’] vouloir ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~(?:ée?s?|ez|ai[ts]?)$ @@ -25491,11 +25490,11 @@ __infi_falloir__ [faut|fallait|fallut|faudra|faudrait] @:V¬:[YMWG] il faille @:V¬:[YMWG] >avoir fallu @:V¬:[YMWG] [faut-il|fallait-il|fallut-il|faudra-t-il|faudrait-il] @:V¬:[YMWG] - <<- /infi/ not (tag_before(\1, "_que_") and morph(\-1, ":3[sp]")) + <<- /infi/ not (tagbefore(\1, "_que_") and morph(\-1, ":3[sp]")) --1>> =suggVerbInfi(\-1) && Après le verbe “falloir”, le verbe devrait être à l’infinitif. [faut|fallait|fallut|faudra|faudrait] [le|la|leur|les|l’] @:V¬:[YMWGN] il faille [le|la|leur|les|l’] @:V¬:[YMWGN] >avoir fallu [le|la|leur|les|l’] @:V¬:[YMWGN] @@ -26742,11 +26741,11 @@ ## Accord et incohérences __ppas_sont_adj__ sont *WORD - <<- /ppas/ morph(\2, ":V[123]", ":(?:N|A|Q|W|G|3p)") and not tag_before(\1, "_ceque_") + <<- /ppas/ morph(\2, ":V[123]", ":(?:N|A|Q|W|G|3p)") and not tagbefore(\1, "_ceque_") -2>> =suggVerbPpas(\2, ":m:p") && Incohérence : “\2” n’est pas un participe passé. TEST: après avoir mis à jour sont {{profile}}. TEST: maintenir en confinement certaines personnes sous prétexte qu’elles sont à risques serait une mesure inconstitutionnelle et discriminatoire. @@ -26900,11 +26899,11 @@ __ppas_se_être__ [me|m’|te|se|s’] ?[y|en]¿ >être *WORD <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QAG]") --1>> =suggVerbPpas(\-1) && Incohérence. Après « s’être », le verbe doit être un participe passé. - <<- /ppas/ __else__ and morph(\-2, ":[123]s") and morph(\-1, ":Q.*:p") and not tag_before(\1, "_que_") and not before("(?i)\\bon (?:ne |)$") + <<- /ppas/ __else__ and morph(\-2, ":[123]s") and morph(\-1, ":Q.*:p") and not tagbefore(\1, "_que_") and not before("(?i)\\bon (?:ne |)$") --1>> =suggSing(\-1) && Le participe passé devrait être au singulier. tu t’ ?[y|en]¿ [es|étais|seras|serais|fus|fusses] *WORD <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QAG]") --1>> =suggVerbPpas(\-1) && Incohérence. Après « s’être », le verbe doit être un participe passé. @@ -28298,16 +28297,16 @@ __ppas_être_confusion__ ne [pas|jamais] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p) <<- /ppas/ --1>> =suggVerbPpas(\-1) && Après “ne \2 être”, il faut un participe passé. avoir [pu|cru|pensé|imaginé] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p) - <<- /ppas/ not value(<1, "|l’|") and not tag_before(\1, "_que_") --1>> =suggVerbPpas(\-1) && Après le verbe “être”, il faut un participe passé. + <<- /ppas/ not value(<1, "|l’|") and not tagbefore(\1, "_que_") --1>> =suggVerbPpas(\-1) && Après le verbe “être”, il faut un participe passé. >être ~..er$ <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and (morph(\2, ":Y", ":[NAQ]") or morph(\2, ">(?:aller|manger)/")) and not morph(<1, ":Y|>ce/") and not value(<1, "|c’|") and not value(<2, "|ce|") - and not tag_before(\1, "_ceque_") and not tag_before(\1, "_sujinfi_") + and not tagbefore(\1, "_ceque_") and not tagbefore(\1, "_sujinfi_") -2>> =suggVerbPpas(\2) && Après “être”, le verbe ne devrait pas être à l’infinitif. >être ~..ez$ <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and morph(\2, ":2p", ":[NAQ]") -2>> =suggVerbPpas(\2) && Après “être”, le verbe ne devrait pas être conjugué à la 2ᵉ personne du pluriel. @@ -28316,16 +28315,16 @@ <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and morph(\2, ":2s", ":[NAQ]") -2>> =suggVerbPpas(\2) && Après “être”, le verbe ne devrait pas être conjugué à la 2ᵉ personne du singulier. >être ~.it$ <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and morph(\2, ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]") - and not tag_before(\1, "_ceque_") and not tag_before(\1, "_sujinfi_") + and not tagbefore(\1, "_ceque_") and not tagbefore(\1, "_sujinfi_") -2>> =suggVerbPpas(\2) && Après “être”, le verbe ne devrait pas être conjugué à la 3ᵉ personne du singulier. >être ~.ut$ <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and morph(\2, ":V3.*:Is.*:3s", ":[NAQ]") - and not tag_before(\1, "_ceque_") and not tag_before(\1, "_sujinfi_") + and not tagbefore(\1, "_ceque_") and not tagbefore(\1, "_sujinfi_") -2>> =suggVerbPpas(\2) && Après “être”, le verbe ne devrait pas être conjugué à la 3ᵉ personne du singulier. TEST: Ne pas être {{aller}} là-bas est une grave erreur que nous regretterons longtemps. TEST: Ne pas être {{arrivez}} à ses fins. TEST: Ne pas être {{prit}} au sérieux. @@ -28649,11 +28648,11 @@ TEST: il faillit agir, mais l’ayant {{remarqués}}, il passa son chemin. __ppas_m_t_avoir__ [m’|t’] >avoir @:Q.*:p¬:[GWsi] - <<- /ppas/ not tag_before(\1, "_que_") or morph(\3, ":V[0-3]..t_") -3>> =suggSing(\3) + <<- /ppas/ not tagbefore(\1, "_que_") or morph(\3, ":V[0-3]..t_") -3>> =suggSing(\3) && Accord avec « \1 ». S’il s’agit d’un COD, le participe passé « \3 » devrait être au singulier (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais TEST: ces livres m’avaient {{ennuyés}} au-delà du dicible. TEST: Les élèves m’ont {{écoutés}}. TEST: Les élèves t’ont de temps en temps {{écoutées}}. @@ -30211,11 +30210,11 @@ #### être / avoir __conf_ait_confiance_été_faim_tort!3__ [es|est] [confiance|conscience|envie|été|peur|faim|hâte|honte|recours|soif|tort] [es|est] peine [à|a] - <<- /conf/ not tag_before(\1, "_ceque_") and not value(<1, "|tout|d’|l’|") + <<- /conf/ not tagbefore(\1, "_ceque_") and not value(<1, "|tout|d’|l’|") -1>> ait|aie && Confusion probable dans l’expression “avoir \2”. Vous utilisez ici le verbe “être”. TEST: il est posssible qu’il {{est}} confiance en toi TEST: Je crains qu’il {{est}} peine à trouver le bonheur. TEST: La révolution est crainte. @@ -30891,20 +30890,20 @@ __conj_le_la_leur_nom__ [le|la|l’|leur] *WORD @:V¬:(?:3s|P|Q|Y|3p!|G|M) <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C||>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G") and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") - or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) + or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "||,|") ) >>> <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3s", suggSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. [le|la|l’|leur] *WORD qui @:V¬:(?:3s|P|3p!|G|M) <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C||>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G") and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") - or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") ) + or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") ) -4>> =suggVerb(\4, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. TEST: La {{N.S.A.}} {{espionneras}} toujours tout le monde TEST: La suspicion envers les élus {{accroissaient}}… ->> accroissait TEST: Le chien n’{{es}} pas mort. @@ -30940,27 +30939,27 @@ __conj_det_sing_nom__ [un|ce|cet|mon|ton|son|notre|votre] *WORD @:[123][sp]¬:(?:3s|P|Y|3p!|G|M) <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C||>,", ":[YP]") and morph(\2, ":[NA].*:[me]:[si]", ":G") and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|nombre|") - or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) >>> + or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) >>> <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3s", suggSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. [une|cette|mon|ton|son|ma|ta|sa|notre|votre] *WORD @:[123][sp]¬:(?:3s|P|Y|3p!|G|M) <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C||>,", ":[YP]") and morph(\2, ":[NA].*:[fe]:[si]", ":G") and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") - or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) >>> + or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) >>> <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A")) -3>> =suggVerb(\3, ":3s", suggSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. [un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre] *WORD qui @:V¬:(?:3s|P|3p!|G|M) <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C||>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G") and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|") - or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") ) + or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") ) -4>> =suggVerb(\4, ":3s") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier. TEST: Tu devrais le savoir, ce roman-là de Jean-Paul Sartre {{es}} passionnant. TEST: Cette confusion qui {{donnent}} le tournis. TEST: tu sais, une hausse de 2 % {{satisfais}} tout le monde ->> satisfait Index: misc/grammalecte.sublime-syntax ================================================================== --- misc/grammalecte.sublime-syntax +++ misc/grammalecte.sublime-syntax @@ -58,11 +58,11 @@ scope: keyword.python - match: '\b(?:True|False|None)\b' scope: constant.language - - match: '\b(?:spell|morph|morphVC|stem|tag|value|space_after|textarea0?\w*|before0?\w*|after0?\w*|word|option|define|define_from|select|exclude|analyse\w*|tag_\w+|apposition|is[A-Z]\w+|agreement|rewrite|checkD\w+|getD\w+|has[A-Z]\w+|sugg[A-Z]\w+|switch[A-Z]\w+|ceOrCet|formatN\w+|mbUnit)\b' + - match: '\b(?:spell|morph(?:VC|)|stem|tag|value|space_after|textarea0?\w*|before0?\w*|after0?\w*|word|option|define(?:from|)|select|exclude|setmeta|analyse\w*|tag(?:after|before)|apposition|is[A-Z]\w+|agreement|rewrite|checkD\w+|getD\w+|has[A-Z]\w+|sugg[A-Z]\w+|switch[A-Z]\w+|ceOrCet|formatN\w+|mbUnit)\b' scope: entity.name.function - match: '\b(?:replace|endswith|startswith|search|upper|lower|capitalize|strip|rstrip|is(?:alpha|upper|lower|digit|title))\b' scope: support.function