Index: gc_lang/fr/modules-js/gce_suggestions.js ================================================================== --- gc_lang/fr/modules-js/gce_suggestions.js +++ gc_lang/fr/modules-js/gce_suggestions.js @@ -24,11 +24,11 @@ sVerb = sVerb.slice(0, iRight); } return [sVerb, sSuffix]; } -function suggVerb (sFlex, sWho, funcSugg2=null, bVC=false) { +function suggVerb (sFlex, sWho, bVC=false, funcSugg2=null, ...args) { let sSfx; if (bVC) { [sFlex, sSfx] = splitVerb(sFlex); } let aSugg = new Set(); @@ -64,11 +64,11 @@ } } } } if (funcSugg2) { - let sSugg2 = funcSugg2(sFlex); + let sSugg2 = (args.length > 0) ? funcSugg2(...args) : funcSugg2(sFlex); if (sSugg2.length > 0) { aSugg.add(sSugg2); } } if (aSugg.size > 0) { @@ -224,10 +224,12 @@ const _dQuiEst = new Map ([ ["je", ":1s"], ["j’", ":1s"], ["tu", ":2s"], ["il", ":3s"], ["on", ":3s"], ["elle", ":3s"], ["iel", ":3s"], ["nous", ":1p"], ["vous", ":2p"], ["ils", ":3p"], ["elles", ":3p"], ["iels", ":3p"] ]); +const _dModeSugg = new Map([ ["es", "aies"], ["aies", "es"], ["est", "ait"], ["ait", "est"] ]); + function suggVerbMode (sFlex, cMode, sSuj) { let lMode; if (cMode == ":I") { lMode = [":Ip", ":Iq", ":Is", ":If"]; } else if (cMode == ":S") { @@ -247,10 +249,13 @@ aSugg.add(conj._getConjWithTags(sStem, tTags, sTense, sWho)); } } } } + if (_dModeSugg.has(sFlex)) { + aSugg.add(_dModeSugg.get(sFlex)); + } if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } @@ -478,10 +483,47 @@ if (aSugg.size > 0) { return Array.from(aSugg).join("|"); } return ""; } + +function suggAgree (sFlexDst, sFlexSrc) { + // returns suggestions for that matches agreement with + let lMorphSrc = gc_engine.oSpellChecker.getMorph(sFlexSrc); + if (lMorphSrc.length === 0) { + return ""; + } + let [sGender, sNumber] = cregex.getGenderNumber(lMorphSrc); + if (sGender == ":m") { + if (sNumber == ":s") { + return suggMasSing(sFlexDst); + } + else if (sNumber == ":p") { + return suggMasPlur(sFlexDst); + } + return suggMasSing(sFlexDst); + } + else if (sGender == ":f") { + if (sNumber == ":s") { + return suggFemSing(sFlexDst); + } + else if (sNumber == ":p") { + return suggFemPlur(sFlexDst); + } + return suggFemSing(sFlexDst); + } + else if (sGender == ":e") { + if (sNumber == ":s") { + return suggSing(sFlexDst); + } + else if (sNumber == ":p") { + return suggPlur(sFlexDst); + } + return sFlexDst; + } + return ""; +} function g_suggAgree (oTokenDst, oTokenSrc) { // returns suggestions for that matches agreement with let lMorphSrc = oTokenSrc.hasOwnProperty("lMorph") ? oTokenSrc["lMorph"] : gc_engine.oSpellChecker.getMorph(oTokenSrc["sValue"]); if (lMorphSrc.length === 0) { Index: gc_lang/fr/modules/gce_suggestions.py ================================================================== --- gc_lang/fr/modules/gce_suggestions.py +++ gc_lang/fr/modules/gce_suggestions.py @@ -17,11 +17,11 @@ sSuffix = sVerb[iRight:] + sSuffix sVerb = sVerb[:iRight] return sVerb, sSuffix -def suggVerb (sFlex, sWho, funcSugg2=None, bVC=False): +def suggVerb (sFlex, sWho, bVC=False, funcSugg2=None, *args): "change conjugation according to " if bVC: sFlex, sSfx = splitVerb(sFlex) dSugg = {} for sStem in _oSpellChecker.getLemma(sFlex): @@ -45,11 +45,11 @@ if sWho == ":1ś" and not conj._hasConjWithTags(tTags, sTense, ":1ś"): sWho = ":1s" if conj._hasConjWithTags(tTags, sTense, sWho): dSugg[conj._getConjWithTags(sStem, tTags, sTense, sWho)] = "" if funcSugg2: - sSugg2 = funcSugg2(sFlex) + sSugg2 = funcSugg2(*args) if args else funcSugg2(sFlex) if sSugg2: dSugg[sSugg2] = "" if dSugg: if bVC: return "|".join([ joinVerbAndSuffix(sSugg, sSfx) for sSugg in dSugg.keys() ]) @@ -174,10 +174,12 @@ _dQuiEst = { "je": ":1s", "j’": ":1s", "tu": ":2s", "il": ":3s", "on": ":3s", "elle": ":3s", "iel": ":3s", \ "nous": ":1p", "vous": ":2p", "ils": ":3p", "elles": ":3p", "iels": ":3p" } +_dModeSugg = { "es": "aies", "aies": "es", "est": "ait", "ait": "est" } + def suggVerbMode (sFlex, cMode, sSuj): "returns other conjugations of acconding to and " if cMode == ":I": lMode = [":Ip", ":Iq", ":Is", ":If"] elif cMode == ":S": @@ -192,10 +194,12 @@ tTags = conj._getTags(sStem) if tTags: for sTense in lMode: if conj._hasConjWithTags(tTags, sTense, sWho): dSugg[conj._getConjWithTags(sStem, tTags, sTense, sWho)] = "" + if sFlex in _dModeSugg: + dSugg[_dModeSugg[sFlex]] = "" if dSugg: return "|".join(dSugg.keys()) return "" @@ -359,10 +363,37 @@ dSugg[e] = "" if dSugg: return "|".join(dSugg) return "" + +def suggAgree (sFlexDest, sFlexSrc): + "returns suggestions for that matches agreement with " + lMorphSrc = _oSpellChecker.getMorph(sFlexSrc) + if not lMorphSrc: + return "" + sGender, sNumber = cr.getGenderNumber(lMorphSrc) + if sGender == ":m": + if sNumber == ":s": + return suggMasSing(sFlexDest) + elif sNumber == ":p": + return suggMasPlur(sFlexDest) + return suggMasSing(sFlexDest) + elif sGender == ":f": + if sNumber == ":s": + return suggFemSing(sFlexDest) + elif sNumber == ":p": + return suggFemPlur(sFlexDest) + return suggFemSing(sFlexDest) + elif sGender == ":e": + if sNumber == ":s": + return suggSing(sFlexDest) + elif sNumber == ":p": + return suggPlur(sFlexDest) + return sFlexDest + return "" + def g_suggAgree (dTokenDst, dTokenSrc): "returns suggestions for that matches agreement with " lMorphSrc = dTokenSrc["lMorph"] if "lMorph" in dTokenSrc else _oSpellChecker.getMorph(dTokenSrc["sValue"]) if not lMorphSrc: Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -911,13 +911,12 @@ TEST: un·e idiot·e __[i](typo_écriture_invariable)__ ({w_3})([-·–—.•⋅/]s|[(]s[)]) @@0,$ - <<- ~>> =normalizeInclusiveWriting(\0) - <<- option("typo") and option("eepi") and not \0.endswith("·s") and not (\0.endswith("/s") and morph(\1, ";S")) - ->> \1·s && Écriture invariable. Utilisez un point médian. + <<- not (\0.endswith("/s") and morph(\1, ";S")) ~>> =normalizeInclusiveWriting(\0) + <<- __also__ and option("typo") and option("eepi") and not \0.endswith("·s") ->> \1·s && Écriture invariable. Utilisez un point médian. TEST: la ou les {{fille(s)}} ->> fille·s TEST: le ou les patron·s TEST: combien de rad/s @@ -1138,18 +1137,22 @@ TEST: il est monté à {{18 %}} ->> 18 % TEST: une température de {{22,4 °C}} ->> 22,4 °C TEST: il en veut {{18kg}} ->> 18 kg TEST: il me le propose pour {{243 gCO2/kWh}} ->> 243 gCO2/kWh TEST: il me le propose pour {{243,4 gCO2/kWh}} ->> 243,4 gCO2/kWh +TEST: {{140 rad/s}} ->> 140 rad/s +TEST: {{200 m}}/s ->> 200 m TEST: {{40 MHz}} ->> 40 MHz TEST: {{100 Ah}} ->> 100 Ah TEST: {{1001 ans}} ->> 1 001 ans TEST: {{500000 euros}} ->> 500 000 euros TEST: en l’an 2000 Urgondorletroll eut une idée TEST: 1998 s’annonce grandiose. TEST: il y en a 3,43 milliards. TEST: je veux 200 euros. +TEST: 140 rad/s +TEST: 140 rad/s __[s]/typo(typo_math)__ (?:cos|sin|tan|cotan|log|ln)²? [2-9]?[a-zA-Zα-ωΑ-Ω](?![’']) <<- ->> =\0.replace(" ", "(")+")|"+\0.replace(" ", " ") && Mettez des parenthèses (ou éventuellement un espace insécable). @@ -1246,20 +1249,20 @@ !!!! Cohérence des guillemets !! !! !! __/typo(typo_cohérence_guillemets_chevrons_ouvrants)__ - («)[^»“]+?(”) @@0,$ + («[  ])[^»“]+?(”) @@0,$ <<- not before("\\w$") -1>> “ && Guillemet ouvrant différent du guillemet fermant (”). <<- not after("^\\w") -2>> " »" && Guillemet fermant différent du guillemet ouvrant («). __/typo(typo_cohérence_guillemets_chevrons_fermants)__ - (“)[^”«]+?(») @@0,$ + (“)[^”«]+?([  ]») @@0,$ <<- not before("\\w$") -1>> "« " && Guillemet ouvrant différent du guillemet fermant (»). <<- not after("^\\w") -2>> ” && Guillemet fermant différent du guillemet ouvrant (“). -TEST: C’est {{«}}stupide{{”}}. -TEST: Quel {{“}}emmerdeur{{»}}, ce gars-là. +TEST: C’est {{« }}stupide{{”}}. ->> “||| » +TEST: Quel {{“}}emmerdeur{{ »}}, ce gars-là. ->> « |||” __/typo(typo_cohérence_guillemets_doubles_ouvrants)__ (“)[^”’“«]+?(’)(?![\w'’)]) @@0,$ <<- not ( after("^”") and re.search("“(?:l|d|c|ç|n|m|t|s|j|z|[A-ZÇ]|qu|jusqu|puisqu|lorsqu|quoiqu|quelqu)’", \0) ) >>> @@ -1268,12 +1271,12 @@ __/typo(typo_cohérence_guillemets_doubles_fermants)__ (‘)[^’“«]+?(”) @@0,$ <<- not before("\\w$") -1>> "“" && Guillemet ouvrant différent du guillemet fermant (”). <<- not after("^\\w") -2>> ’ && Guillemet fermant différent du guillemet ouvrant (‘). -TEST: Tu sais, {{‘}}ton ami{{”}} est venu. -TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}. +TEST: Tu sais, {{‘}}ton ami{{”}} est venu. ->> “|||’ +TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}. ->> ‘|||” TEST: Après “n’”, il faut une forme verbale. TEST: il (n’)est (pas) là. __[i]/typo(typo_guillemets_doubles_ouvrants_non_fermés)__ @@ -2355,74 +2358,74 @@ !! !! __inte_verbes_composés_interrogatifs__ ~\w-[jJ]e$ - <<- /inte/ morphVC(\1, ":V", ":1[sśŝ]") ->> =suggVerb(\1, ":1ś", None, True) && Forme interrogative. Désaccord avec “je”. Le verbe n’est pas à la 1ʳᵉ personne du singulier. + <<- /inte/ morphVC(\1, ":V", ":1[sśŝ]") ->> =suggVerb(\1, ":1ś", True) && Forme interrogative. Désaccord avec “je”. Le verbe n’est pas à la 1ʳᵉ personne du singulier. <<- /inte/ __else__ and not morphVC(\1, ":V") ->> =suggSimil(\1, ":1[sśŝ]", False, True) && Forme interrogative. Désaccord avec “je”. Le verbe n’est pas à la 1ʳᵉ personne du singulier. <<- />> -je|_VCint_ <<- value(<1, "|me|m’|") />> _upron_ aie-je <<- /vmode/ ->> ai-je && Forme interrogative. N’employez pas le subjonctif présent. ~\w-[tT]u$ - <<- /inte/ morphVC(\1, ":V", ":[ISK].*:2s") ->> =suggVerb(\1, ":2s", None, True) && Forme interrogative. Désaccord avec “tu”. Le verbe n’est pas à la 2ᵉ personne du singulier. + <<- /inte/ morphVC(\1, ":V", ":[ISK].*:2s") ->> =suggVerb(\1, ":2s", True) && Forme interrogative. Désaccord avec “tu”. Le verbe n’est pas à la 2ᵉ personne du singulier. <<- /inte/ __else__ and not morphVC(\1, ":V") ->> =suggSimil(\1, ":2s", False, True) && Forme interrogative. Désaccord avec “tu”. Le verbe n’est pas à la 2ᵉ personne du singulier. <<- />> -tu|_VCint_ <<- value(<1, "|te|t’|") />> _upron_ ~\w-[iI]l$ - <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", None, True) + "|" + \1+"s" && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier. - <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", None, True) && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier. + <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", True) + "|" + \1+"s" && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier. + <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", True) && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>(?:t|voilà)/") ->> =suggSimil(\1, ":3s", False, True) && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier. <<- />> -il|_VCint_ <<- value(<1, "|se|s’|") />> _upron_ ~\w-[eE]lle$ - <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", None, True) + "|" + \1+"s" && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier. - <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", None, True) && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier. + <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", True) + "|" + \1+"s" && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier. + <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", True) && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3s", False, True) && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier. <<- />> -elle|_VCint_ <<- value(<1, "|se|s’|") />> _upron_ ~\w-[iI]el$ - <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", None, True) + "|" + \1+"s" && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier. - <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", None, True) && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier. + <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", True) + "|" + \1+"s" && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier. + <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", True) && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3s", False, True) && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier. <<- />> -iel|_VCint_ <<- value(<1, "|se|s’|") />> _upron_ ~\w-[oO]n$ - <<- /inte/ morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", None, True) && Forme interrogative. Désaccord avec “on”. Le verbe n’est pas à la 3ᵉ personne du singulier. + <<- /inte/ morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", True) && Forme interrogative. Désaccord avec “on”. Le verbe n’est pas à la 3ᵉ personne du singulier. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3s", False, True) && Forme interrogative. Désaccord avec “on”. Le verbe n’est pas à la 3ᵉ personne du singulier. <<- />> -on|_VCint_ <<- value(<1, "|se|s’|") />> _upron_ ~\w-[cCs]e$ <<- /inte/ morphVC(\1, ":V", ":(?:3s|V0e.*:3p)") - ->> =suggVerb(\1, ":3s", None, True) && Forme interrogative. Désaccord avec “ce”. Le verbe n’est pas à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132 + ->> =suggVerb(\1, ":3s", True) && Forme interrogative. Désaccord avec “ce”. Le verbe n’est pas à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132 <<- /inte/ __else__ and morphVC(\1, ":", ":V") ->> =suggSimil(\1, ":3s", False, True) && Forme interrogative. Désaccord avec “ce”. Le verbe n’est pas à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132 <<- /conf/ \1.endswith("se") ->> =\1[:-2]+"ce" && Forme interrogative. Confusion.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132 <<- />> -ce|_VCint_ <<- value(<1, "|se|s’|") />> _upron_ ~\w-[iI]ls$ - <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", None, True) && Forme interrogative. Désaccord avec “ils”. Le verbe n’est pas à la 3ᵉ personne du pluriel. + <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", True) && Forme interrogative. Désaccord avec “ils”. Le verbe n’est pas à la 3ᵉ personne du pluriel. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3p", False, True) && Forme interrogative. Désaccord avec “ils”. Le verbe n’est pas à la 3ᵉ personne du pluriel. <<- />> -ils|_VCint_ <<- value(<1, "|se|s’|") />> _upron_ ~\w-[eE]lles$ - <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", None, True) && Forme interrogative. Désaccord avec “elles”. Le verbe n’est pas à la 3ᵉ personne du pluriel. + <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", True) && Forme interrogative. Désaccord avec “elles”. Le verbe n’est pas à la 3ᵉ personne du pluriel. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3p", False, True) && Forme interrogative. Désaccord avec “elles”. Le verbe n’est pas à la 3ᵉ personne du pluriel. <<- />> -elles|_VCint_ <<- value(<1, "|se|s’|") />> _upron_ ~\w-[iI]els$ - <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", None, True) && Forme interrogative. Désaccord avec “iels”. Le verbe n’est pas à la 3ᵉ personne du pluriel. + <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", True) && Forme interrogative. Désaccord avec “iels”. Le verbe n’est pas à la 3ᵉ personne du pluriel. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3p", False, True) && Forme interrogative. Désaccord avec “iels”. Le verbe n’est pas à la 3ᵉ personne du pluriel. <<- />> -iels|_VCint_ <<- value(<1, "|se|s’|") />> _upron_ TEST: {{Vas-je}} ->> Vais-je @@ -2461,17 +2464,17 @@ __inte_verbes_composés_interrogatifs_impératifs__ ~\w-[nN]ous$ <<- /inte/ not re.search("-[lL](?:es?|a)-[nN]ous$", \1) >>> - <<- /inte/ morphVC(\1, ":V", ":(?:1p|E:2[sp])") ->> =suggVerb(\1, ":1p", None, True)+"|"+suggVerbImpe(\1, True) && Forme interrogative ou impérative incorrecte. + <<- /inte/ morphVC(\1, ":V", ":(?:1p|E:2[sp])") ->> =suggVerb(\1, ":1p", True)+"|"+suggVerbImpe(\1, True) && Forme interrogative ou impérative incorrecte. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>(?:chez|malgré)/") ->> =suggSimil(\1, ":1p", False, True) && Forme interrogative ou impérative incorrecte. <<- />> -nous|_VCint_ ~\w-[vV]ous$ <<- /inte/ not re.search("-[lL](?:es?|a)-[vV]ous$", \1) >>> - <<- /inte/ morphVC(\1, ":V", ":2p") ->> =suggVerb(\1, ":2p", None, True) && Forme interrogative ou impérative. Désaccord avec “vous”. Le verbe n’est pas à la 2ᵉ personne du pluriel. + <<- /inte/ morphVC(\1, ":V", ":2p") ->> =suggVerb(\1, ":2p", True) && Forme interrogative ou impérative. Désaccord avec “vous”. Le verbe n’est pas à la 2ᵉ personne du pluriel. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>chez/") ->> =suggSimil(\1, ":2p", False, True) && Forme interrogative ou impérative. Désaccord avec “vous”. Le verbe n’est pas à la 2ᵉ personne du pluriel. <<- />> -vous|_VCint_ TEST: {{Prendront-nous}} ->> Prendrons-nous|Prends-nous|Prenons-nous|Prenez-nous TEST: {{Attendront-nous}} le train ->> Attendrons-nous|Attends-nous|Attendons-nous|Attendez-nous @@ -5512,12 +5515,15 @@ TEST: il n’avait contracté qu’un {{pseudo mariage}}. ->> pseudo-mariage TEST: la {{pseudo taxe}} carbone ->> pseudo-taxe __tu_mots_composés_verbe_nom__ + contre >productif + <<- /tu/ ->> \1-\2 && Il manque un trait d’union. + [contre|entre] *WORD - <<- /tu/ not morph(\2, ":[GYB]") and morph(<1, ":(?:D|V0e)||>,") and morph2(\1, "-", ":N") + <<- /tu/ not morph(\2, ":[GYB]") and morph(<1, ":(?:D|V.e)||>,") and morph2(\1, "-", ":N") ->> \1-\2 && Il manque probablement un trait d’union. [m’|t’|s’] entre *WORD <<- /tu/ morph(\3, ":V") and morph2(\2, "-", ":V") -2:3>> \2-\3 && Il manque probablement un trait d’union. @@ -5529,11 +5535,12 @@ [attrape|garde|porte|brise|cache|casse|chauffe|coupe|cure|croque|essuie|lance|lave|lève|marque|pare|passe|perce|pèse|porte|poste|pousse|presse|protège|ramasse|serre|taille|tire|tourne|traîne|traine|vide] *WORD <<- /tu/ morph(<1, ":(?:D|V0e)||>,") and morph2(\1, "-", ":N") ->> \1-\2 && Il manque probablement un trait d’union. -TEST: c’est le {{contre exemple}} parfait ->> contre-exemple +TEST: ça semble totalement {{contre productif}} ->> contre-productif +TEST: c’est le {{contre exemple}} parfai ->> contre-exemple TEST: une {{entre voie}} ->> entre-voie TEST: s’{{entre regarder}} ->> entre-regarder TEST: ce sont des {{lève tard}}. ->> lève-tard TEST: nous nous {{entre tuions}} ->> entre-tuions TEST: un {{brise glace}} ->> brise-glace @@ -8165,18 +8172,18 @@ __conf_de_vconj__ [de|d’] @:[123][sp]¬:[GNA] <<- /conf/ not \2.istitle() and not \2.isupper() and not value(\2, "|jure|") and not tag(\2, "eg1mot") -2>> =suggSimil(\2, ":[NA]", True)+"|"+suggVerbInfi(\2) && Incohérence avec « \1 » : “\2” est une forme verbale conjuguée. -TEST: il s’agit de {{mette}} en évidence. -TEST: sa façon de {{nettoyez}} était inefficace. ->> nettoyer|nettoyant +TEST: il s’agit de {{mette}} en évidence. ->> mettre|mets|mise|mises|misses|missions +TEST: sa façon de {{nettoyez}} était inefficace. ->> nettoyer|nettoyant [de|d’] [l’|leur] @:[123][sp]¬:[GNAQ] <<- /conf/ not \3.istitle() and not \3.isupper() -3>> =suggSimil(\3, ":[NA].*:[si]", True) && Incohérence avec « \1 \2 » : “\3” est une forme verbale conjuguée. -TEST: de l’{{arrivait}} ->> arrivée|arrivant +TEST: de l’{{arrivait}} ->> arrivée|arrivant TEST: la production d’électricité par des énergies renouvelables aurait encore augmenté de 7 %, selon les calculs de l’AIE [de|d’] le *WORD <<- /conf/ space(\1, 0, 1) and morph(\3, ":[NAQ].*:[me]", ":[YG]") and not \3.istitle() @@ -17958,11 +17965,11 @@ [centrale+s] d’ >achat >centre d’ éducation [populaire|surveillée] >centre [de|d’] rétention ?[préventive|administrative]¿ >certificat [de|d’] [conformité|virginité] >certificat [de|d’] bonne conduite - >certificat [de|d’] études [primaires|secondaires|supérieures|spécialisées|musicales|théâtrales|bibliques|théologiques] + >certificat d’ études ?[primaires|secondaires|supérieures|spécialisées|musicales|théâtrales|bibliques|théologiques]¿ >certificat [de|d’] scolarité ?[maternelle|primaire|secondaire]¿ >chair à [pâté|>canon] >chair [de|d’] poule >chalet d’ alpage >chambre à [coucher|gaz] @@ -18074,11 +18081,11 @@ >dindon [de|d’] la farce dieu tout-puissant [>dîner|>diner] aux chandelles [>dîner|>diner] [de|d’] gala >discipline [de|d’] [acier|fer] - >doigt de fée + >doigt [de|d’] fée >don en nature >donneur [de|d’] >leçon >dossier d’ inscription ?[administrative|scolaire]¿ >dossier [de|d’] presse >drapeau en berne @@ -18098,11 +18105,11 @@ >élément à charge >emploi du temps >employé [de|d’] maison >ennemi d’ État ennemi public numéro [un|$:B|*NUM] - ennemie publique numéro [un|$:B|*NUM] + ennemie publique numéro [un|une|$:B|*NUM] >ennui [de|d’] santé >enregistreur [de|d’] vol >enterrement [de|d’] vie [de|d’] garçon >enterrement [de|d’] vie [de|d’] jeune fille >entrée [de|d’] service @@ -18160,12 +18167,12 @@ >fille à [papa|maman|>soldat] >fille au pair >film X fils à [papa|maman] fils [de|d’] pute - >figure de proue - >fin [de] non-recevoir + >figure [de|d’] proue + >fin [de|d’] non-recevoir >fleuve à sec >flic en civil >flocon [de|d’] neige ?électronique¿ >foire d’ >empoigne fonds d’ investissement @@ -18317,12 +18324,12 @@ >médaille d’ [or|argent|bronze] >médecin [de|d’] [famille|garde] >mère au foyer >mesure >barrière >metteur en scène - >mineur [de|d’] moins [de|d’] *NUM ans - >mineur [de|d’] moins [de|d’] $:B:e:p ans + >mineur [de|d’] [moins|plus] [de|d’] *NUM ans + >mineur [de|d’] [moins|plus] [de|d’] $:B:e:p ans >minute d’ arc >miroir aux alouettes >mise en danger de la vie d’ autrui >mouchoir [de|d’] poche >mode [de|d’] [emploi|paiement|scrutin|vie] @@ -18339,11 +18346,11 @@ >moulin à [café|eau|paroles|poivre|prières|vent] >mouton à [cinq|5] pattes [moyen+s] [de|d’] transport >navire [de|d’] plaisance >nerf à vif - >nettoyeur haute pression + >nettoyeur ?à¿ haute pression >nid à merde >nid [de|d’] résistance >niveau [de|d’] vie noix [de|d’] [cajou|pécan|pecan|coco|lavage|muscade|veau|macadamia] >nom à particule @@ -18389,10 +18396,11 @@ >périphérique à bande ?[analogique|magnétique]¿ >personnage [de|d’] roman perspectives d’ avenir >perte [de|d’] temps ?précieux¿ >peur [de|d’] tous les diables + >phase [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] >phase [I|II|III|IV|V|VI|VII|VIII|IX|X|XI|XII|XIII|XIV|XV|XVI|XVII|XVIII|XIX|XX|XXI|XXII|XXIII|XXIV|XXV|XXVI|XXVII|XXVIII|XXIX|XXX] >piano à queue >pièce à conviction >pièce [de|d’] [théâtre|monnaie|rechange] >pièce [de|d’] *NUM [>euro|>dollar|>centime|>cent|>livre|>shilling] @@ -18704,11 +18712,11 @@ >sourd comme un pot >sujet à [caution|débat|interprétation] >sujet à interprétations diverses [>sur|>sûr] de [mon|ton|son|notre|votre|leur] bon droit >têtu comme une [bourrique|mule] - >têtu comme un [âne|bourriquot|mulet] + >têtu comme un [âne|bourricot|mulet] [tiré+ses] à [quatre|4] épingles [vu+ses] d’ un ?très¿ [bon|mauvais] œil <<- ~2:0>> * flambant >neuf @@ -18731,18 +18739,19 @@ >calibre *NUM ?[mm|in]¿ >calibre *NUM [*|×] *NUM ?[mm|in]¿ <<- ~2:0>> * <<- =>> =select(\1, ":N") - une bonne chose de réglée + une bonne chose [de|d’] réglée <<- ~-2:0>> * [le|la|l’|les] $:N d’ alors <<- ~-2:0>> * - [>homme|>femme|>garçon|>garçonnet|>fille|>fillette|>vieillard|>acteur|>architecte|>auteur|>artiste|>chef|>cinéaste|>cuisinier|>dessinateur|>écrivain|>graphiste|>ingénieur|>joueur|>musicien|>peintre|>photographe|>réalisateur] - || [de|d’] grand talent + [>homme|>femme|>garçon|>garçonnet|>fille|>fillette|>gonzesse|>mec|>meuf|>vieillard] [de|d’] grand talent + [>acteur|>architecte|>artiste|>auteur|>chef|>cinéaste|>cuisinier|>dessinateur|>écrivain|>graphiste] [de|d’] grand talent + [>ingénieur|>joueur|>musicien|>peintre|>photographe|>réalisateur] [de|d’] grand talent <<- ~2:0>> * __purge_syntagmes_nominaux_matière__ *WORD en acier ?[galvanisé|inoxydable|trempé]¿ ?[clair|foncé|rouge|vert|brun|marron|jaune|orange|bleu|gris|rose|noir|blanc]¿ @@ -32892,29 +32901,29 @@ <<- /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 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", suggMasSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + -3>> =suggVerb(\3, ":3s", False, suggMasSing) && 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. la *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 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", suggFemSing) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + -3>> =suggVerb(\3, ":3s", False, suggFemSing) && 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. [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 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. + -3>> =suggVerb(\3, ":3s", False, 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é|") @@ -32963,19 +32972,19 @@ [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]|>et/") 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 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. + -3>> =suggVerb(\3, ":3s", False, 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]|>et/") 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 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. + -3>> =suggVerb(\3, ":3s", False, 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]|>et/") 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é|") @@ -33290,11 +33299,11 @@ __conj_det_plur_nom__ [ces|mes|tes|ses|nos|vos|leurs|quelques] @:[NA].*:[pi]¬:V0 @:V¬:(?:3p|P|Y|G|M|A.*:[pi]) <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>> <<- /conj/ not tag(\-1, "_ngn_") and (morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))) - -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + -3>> =suggVerb(\3, ":3p", False, suggAgree, \3, \2) && Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. [ces|mes|tes|ses|nos|vos|leurs|quelques] @:[NA].*:[pi]¬:V0 qui @:V¬:(?:3p|P|Y|G|M|A.*:e:[pi]) <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) @@ -33304,11 +33313,11 @@ TEST: mes filles {{passe}} ce matin ->> passent TEST: vos filles {{passes}} ce matin ->> passent TEST: ces travaux qui {{demande}} tant d’efforts. ->> demandent TEST: vos questions ne {{réclame}} aucune réflexion. ->> réclament TEST: Ces attaques à main armée {{donne}} la chair de poule. ->> donnent -TEST: Ces marchands {{passe}} leur temps à se quereller. +TEST: Ces marchands {{passe}} leur temps à se quereller. ->> passent|passes|passés TEST: maints hommes {{oublie}} leurs origines pour mieux se construire un passé glorieux ->> oublient TEST: nos hommes qui {{repartirons}} demain ->> repartiront TEST: le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler. TEST: trier les cons et les connes expose à un violent coup de boomerang TEST: Tu penses que quelqu’un qui frappe sa femme et ses enfants est un bon père ? @@ -33319,11 +33328,11 @@ <<- /conj/ morph(<1, ":Cs||>,") and not ( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) 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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))) - -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + -3>> =suggVerb(\3, ":3p", False, suggAgree, \3, \2) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. les @:[NA].*:[pi] qui @:V¬:(?:3p|P|Y|G|M) <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) @@ -33337,19 +33346,19 @@ TEST: Les hommes comme celui-là {{mange}} comme deux. ->> mangent TEST: les récompenses distribuées à parts égales {{était}}… ->> étaient TEST: Les États-Unis d’Amérique se {{compose}} de 50 états. ->> composent TEST: Les enfants en {{manges}}. ->> mangent TEST: Les ombres la {{donnes}} ->> donnent -TEST: les grands {{danse}} +TEST: les grands {{danse}} ->> dansent|dansés TEST: les filles {{passes}} ce matin ->> passent -TEST: les marchands {{marche}} -TEST: les marchands {{plie}} +TEST: les marchands {{marche}} ->> marchent +TEST: les marchands {{plie}} ->> plient|pliés TEST: il prétendait que les banques universelles « à la française » s’{{était}} bien comportées ->> étaient -TEST: les marchands {{paye}} -TEST: les marchands {{marchande}} -TEST: les marchandes {{paie}} -TEST: les marchandes {{marchande}} ->> marchandent|marchandes +TEST: les marchands {{paye}} ->> payent|payés +TEST: les marchands {{marchande}} ->> marchandent|marchands|marchandés +TEST: les marchandes {{paie}} ->> payent|paies|payées +TEST: les marchandes {{marchande}} ->> marchandent|marchandes|marchandées TEST: les chattes {{finis}} ->> finissent|finirent|finissaient TEST: les chattes {{manges}} ->> mangent TEST: les religieux qui n’en {{finisse}} pas de mentir. ->> finissent TEST: Les tests grand public de Jean-Paul {{montre}} des résultats surprenants. ->> montrent TEST: les malades que tu as servis {{outrepasse}} leur droit ->> outrepassent @@ -33373,29 +33382,29 @@ <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) 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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))) - -3>> =suggVerb(\3, ":3p", suggMasPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + -3>> =suggVerb(\3, ":3p", False, suggMasPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. [certaines|maintes] @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|M) <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) 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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))) - -3>> =suggVerb(\3, ":3p", suggFemPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + -3>> =suggVerb(\3, ":3p", False, suggFemPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. plusieurs @:[NA].*:[pi] @:V¬:(?:3p|P|Y|G|M) <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) 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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A"))) - -3>> =suggVerb(\3, ":3p", suggPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. + -3>> =suggVerb(\3, ":3p", False, suggPlur) && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect. <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p") && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel. [certains|certaines|plusieurs|maints|maintes] @:[NA].*:[pi] qui @:V¬:(?:3p|P|Y|G|M) <<- /conj/ morph(<1, ":Cs||>,") and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) @@ -33420,11 +33429,11 @@ __conj_des_nom__ [|,|(] des @:[NA].*:[pi] @:V¬:(?:3p|P|G|Q|Y|A.*:[pi]|V[23].*:Y) <<- /conj/ morph(>1, ":(?:R|D.*:p)|>au/||>,") >>> <<- /conj/ not morph(\4, ":[NA]") -4>> =suggVerb(\4, ":3p") && Conjugaison erronée. Accord avec “\2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel. - <<- /conj/ __else__ and not agreement(\3, \4) -4>> =suggVerb(\4, ":3p", suggPlur) && Conjugaison erronée. Accord avec “\2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel. + <<- /conj/ __else__ and not agreement(\3, \4) -4>> =suggVerb(\4, ":3p", False, suggPlur) && Conjugaison erronée. Accord avec “\2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel. [|,|(] des @:[NA].*:[pi] qui @:V¬:(?:3p|P|G) <<- /conj/ -5>> =suggVerb(\5, ":3p") && Conjugaison erronée. Accord avec “\2 \3 \4…”. Le verbe devrait être à la 3ᵉ personne du pluriel. *WORD des @:[NA].*:[pi] qui @:V¬:(?:3p|P|G) @@ -33863,15 +33872,15 @@ # indicatif nécessaire __vmode_sujet_indicatif__ [je|j’|tu|il|ils|elle|elles|on|nous|vous|iel|iels] @:S¬:[GIK]|V0a.*:Sq <<- /vmode/ --1>> =suggVerbMode(\-1, ":I", \-2) && Ce verbe ne devrait pas être au subjonctif. -TEST: Il {{ait}} demandé. ->> a|avait|eut|aura +TEST: Il {{ait}} demandé. ->> a|avait|eut|aura|est TEST: Il en {{conclue}} qu’il a eu raison. ->> conclut|concluait|conclura TEST: j’en {{aie}} marre ->> ai|avais|eus|aurai TEST: j’{{aie}} faim ->> ai|avais|eus|aurai -TEST: Tu ne l’y {{aies}} pas vu. ->> as|avais|eus|auras +TEST: Tu ne l’y {{aies}} pas vu. ->> as|avais|eus|auras|es # Après/dès que + indicatif __vmode_que_indicatif__ [après|dès] [que|qu’] @:(?:Os|M) @:V.*:S¬:[GI] @@ -33880,11 +33889,11 @@ à mesure [que|qu’] @:(?:Os|M) @:V.*:S¬:[GI] à mesure [que|qu’] @:(?:Os|M) @:V0e.*:S <<- /vmode/ -5>> =suggVerbMode(\5, ":I", \4) && Après « à mesure que », le verbe ne s’emploie pas au subjonctif mais à l’indicatif. -TEST: Après qu’il {{ait}} pris la tangeante ->> a|avait|eut|aura +TEST: Après qu’il {{ait}} pris la tangeante ->> a|avait|eut|aura|est TEST: Après que nous {{ayons}} mangé son repas. ->> avons|avions|eûmes|aurons TEST: Après que tu {{sois}} parti, il plut. ->> es|étais|fus|seras TEST: Dès qu’il y {{eût}} pensé, il fit ce qu’il fallait pour résoudre le problème. ->> a|avait|eut|aura TEST: à mesure qu’elle {{devienne}} forte ->> devient|devenait|devint|deviendra @@ -33945,27 +33954,27 @@ <<- /vmode/ --1>> =suggVerbMode(\-1, ":S", \-2) && Après “mieux valoir que”, ce verbe devrait être au subjonctif. TEST: Il suffit qu’il {{court}} plus ->> coure|courût TEST: j’attends que tu {{viens}}. ->> viennes|vinsses TEST: Je veux qu’il {{finit}} son repas. ->> finisse|finît -TEST: Je ne veux pas que tu {{es}} des ennuis ->> sois|fusses +TEST: Je ne veux pas que tu {{es}} des ennuis ->> sois|fusses|aies TEST: je doute qu’il {{vient}} demain. ->> vienne|vînt TEST: il se peut que nous {{avons}} tort. ->> ayons|eussions TEST: j’ai bon espoir qu’il {{vient}} vite. ->> vienne|vînt TEST: peu s’en est fallu qu’il {{devient}} estropié. ->> devienne|devînt -TEST: je m’étonne qu’il {{est}} aussi fragile ->> soit|fût -TEST: elle a envie qu’il {{est}} intelligent. ->> soit|fût +TEST: je m’étonne qu’il {{est}} aussi fragile ->> soit|fût|ait +TEST: elle a envie qu’il {{est}} intelligent. ->> soit|fût|ait TEST: il importera que nous {{devenons}} prêts. ->> devenions|devinssions TEST: prends garde que vous {{revenez}} en un seul morceau. ->> reveniez|revinssiez TEST: ça ira, si tant est que Paul {{comprend}} ce qui se passe. ->> comprenne|comprît TEST: faites attention à ce qu’elle ne {{devient}} pas timorée. ->> devienne|devînt TEST: je tiens à ce que vous {{devenez}} grands. ->> deveniez|devinssiez -TEST: Veille à ce qu’il y {{est}} des gâteaux. ->> soit|fût +TEST: Veille à ce qu’il y {{est}} des gâteaux. ->> soit|fût|ait TEST: il arrive qu’il {{vient}}, mais rarement ->> vienne|vînt TEST: Vaudrait mieux qu’elle {{meurt}} ->> meure|mourût TEST: il aurait mieux valu qu’elle {{meurt}} ->> meure|mourût -TEST: il est possible qu’il {{est}} parti ->> soit|fût +TEST: il est possible qu’il {{est}} parti ->> soit|fût|ait TEST: se peut-il que je {{viens}} ->> vienne|vinsse TEST: Je ne doute pas qu’ils réussiront leur mission. TEST: Je me doutais bien qu’Apple pourrait marcher TEST: Je me doutais bien qu’elle me détestait TEST: Je veux que tu sois prudent. @@ -34030,11 +34039,11 @@ <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4) && Après “\2 que”, le verbe s’emploie au subjonctif. jusqu’ à [ce|tant] [que|qu’] @:(?:Os|M) @:I¬:[GYS] <<- /vmode/ --1>> =suggVerbMode(\-1, ":S", \-2) && Après “\1 \2 \3 que”, ce verbe devrait être au subjonctif. -TEST: Quoiqu’il {{est}} parti il y a longtemps, on pense encore beaucoup à lui. ->> soit|fût +TEST: Quoiqu’il {{est}} parti il y a longtemps, on pense encore beaucoup à lui. ->> soit|fût|ait TEST: quoi qu’il en {{conclut}} ->> conclue|conclût TEST: Avant que tu {{pars}}, je voudrais qu’on discute. ->> partes|partisses TEST: Sans qu’elle {{prend}} le temps d’analyser le problème. ->> prenne|prît TEST: il est possible qu’il {{vient}} demain. ->> vienne|vînt TEST: à condition que tu {{réussis}} ->> réussisses @@ -34049,11 +34058,11 @@ TEST: à condition qu’elle le {{pensa}} ->> pense|pensât TEST: non qu’il {{prend}} son temps ->> prenne|prît TEST: si tant est que nous {{prenons}} notre temps ->> prenions|prissions TEST: moyennant qu’elle {{vient}} demain ->> vienne|vînt TEST: en attendant qu’il {{devient}} plus raisonnable ->> devienne|devînt -TEST: {{où}} qu’il {{est}}, on le trouvera ->> ou|||soit|fût +TEST: {{où}} qu’il {{est}}, on le trouvera ->> ou|||soit|fût|ait TEST: Il ne le savait pas, bien qu’il en {{avait}} entendu parler. ->> ait|eût TEST: Bien que je {{prends}} mon mal en patience. ->> prenne|prisse TEST: encore qu’il {{sait}} s’y prendre ->> sache|sût TEST: jusqu’à ce qu’elle {{vient}} avec nous ->> vienne|vînt TEST: C’est un joli bien. Bien qu’il a hérité de son oncle, notez bien. @@ -34230,10 +34239,11 @@ !!! Indécidable !! TEST: Du sable fin grippe les rouages (accord avec ce qui précède). TEST: Du monde noir sortent les envahisseurs (accord avec ce qui suit). !!! Autres tests !! +TEST: Mon père est contre et ma mère se dit pour mais a un discours très hypocrite quand on aborde le sujet. TEST: l’ambulance censée amener Cédric n’est jamais arrivée TEST: Chez les intellectuels, le mot utopie n’a jamais été synonyme de folie, mais il l’a été pour l’homme de la rue. TEST: Les États parties sont les pays qui ont ratifié la Convention du patrimoine mondial. TEST: Ça a l’air de t’aller. TEST: Et je m’en sors.