Index: compile_rules_graph.py ================================================================== --- compile_rules_graph.py +++ compile_rules_graph.py @@ -36,30 +36,31 @@ if sCode[0:1] == "=": sCode = sCode[1:] 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(morph0?|morphVC|value|tag|meta|info)[(]\\(\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode) + sCode = re.sub(r"\b(morph0?|morphVC|value|tag|meta|info)[(]\\-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', 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[(][\\](\d+)", 'g_space(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode) sCode = re.sub(r"\bspace[(][\\]-(\d+)", 'g_space(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 - sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(<1", 'g_\\1(lToken[nTokenOffset]', sCode) # previous token - sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(>(\d+)", 'g_\\1(g_token(lToken, nLastToken+\\2)', sCode) # next token - sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(<(\d+)", 'g_\\1(g_token(lToken, nTokenOffset+1-\\2)', sCode) # previous token + sCode = re.sub(r"\b(morph0?|tag|meta|value)\(>1", 'g_\\1(lToken[nLastToken+1]', sCode) # next token + sCode = re.sub(r"\b(morph0?|tag|meta|value)\(<1", 'g_\\1(lToken[nTokenOffset]', sCode) # previous token + sCode = re.sub(r"\b(morph0?|tag|meta|value)\(>(\d+)", 'g_\\1(g_token(lToken, nLastToken+\\2)', sCode) # next token + sCode = re.sub(r"\b(morph0?|tag|meta|value)\(<(\d+)", 'g_\\1(g_token(lToken, nTokenOffset+1-\\2)', sCode) # previous token + sCode = re.sub(r"\bspace[(](>1)", 'g_space(lToken[nLastToken+1], g_token(lToken, nLastToken+2)', sCode) # next token + sCode = re.sub(r"\bspace[(](<1)", 'g_space(lToken[nTokenOffset], lToken[nTokenOffset+1]', sCode) # previous token sCode = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', sCode) sCode = re.sub(r"\bbefore\(\s*", 'look(sSentence[:lToken[1+nTokenOffset]["nStart"]], ', sCode) # before(sCode) sCode = re.sub(r"\bafter\(\s*", 'look(sSentence[lToken[nLastToken]["nEnd"]:], ', sCode) # after(sCode) sCode = re.sub(r"\bbefore0\(\s*", 'look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], ', sCode) # before0(sCode) sCode = re.sub(r"\bafter0\(\s*", 'look(sSentence[lToken[nLastToken]["nEnd"]:], ', sCode) # after0(sCode) - sCode = re.sub(r"\banalyseWord[(]", 'analyse(', sCode) sCode = re.sub(r"\bagreement[(]\\(\d+), *\\(\d+)", 'g_agreement(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\2]', sCode) sCode = re.sub(r"\bagreement[(]\\(\d+), *\\-(\d+)", 'g_agreement(lToken[nTokenOffset+\\1], lToken[nLastToken-\\2+1]', sCode) sCode = re.sub(r"[\\](\d+)", 'lToken[nTokenOffset+\\1]["sValue"]', sCode) sCode = re.sub(r"[\\]-(\d+)", 'lToken[nLastToken-\\1+1]["sValue"]', sCode) sCode = re.sub(r">1", 'lToken[nLastToken+1]["sValue"]', sCode) Index: doc/syntax.txt ================================================================== --- doc/syntax.txt +++ doc/syntax.txt @@ -340,13 +340,13 @@ > Analyses the value of the nth token. > The contains values separated by the sign `|`. > Example: `"|foo|bar|"` `morph(n, "regex"[, "neg_regex"][, trim_left=0][, trim_right=0])` -`analyse(n, "regex"[, "neg_regex"][, trim_left=0][, trim_right=0])` +`morph0(n, "regex"[, "neg_regex"][, trim_left=0][, trim_right=0])` -> Same action with `morph()` and `morph0()` for regex rules. +> Same action with `morph()` and `analyse()` for regex rules. > Parameters and removed n characters at left or the right of the token before performing an analyse. `space(n, min_space[, max_space])` > Returns True if the next token after token n is separated with at least blank spaces and at most with blank spaces. 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 @@ -236,11 +236,11 @@ } // search sPattern return lMorph.some(sMorph => (sMorph.search(sPattern) !== -1)); } -function g_analyse (oToken, sPattern, sNegPattern="", nLeft=null, nRight=null, bMemorizeMorph=true) { +function g_morph0 (oToken, sPattern, sNegPattern="", nLeft=null, nRight=null, bMemorizeMorph=true) { // analyse a token, return True if not in morphologies and in morphologies let lMorph; if (nLeft !== null) { let sValue = (nRight !== null) ? oToken["sValue"].slice(nLeft, nRight) : oToken["sValue"].slice(nLeft); lMorph = gc_engine.oSpellChecker.getMorph(sValue); 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 @@ -197,11 +197,11 @@ # search sPattern zPattern = re.compile(sPattern) return any(zPattern.search(sMorph) for sMorph in lMorph) -def g_analyse (dToken, sPattern, sNegPattern="", nLeft=None, nRight=None, bMemorizeMorph=True): +def g_morph0 (dToken, sPattern, sNegPattern="", nLeft=None, nRight=None, bMemorizeMorph=True): "analyse a token, return True if not in morphologies and in morphologies (disambiguation off)" if nLeft is not None: lMorph = _oSpellChecker.getMorph(dToken["sValue"][slice(nLeft, nRight)]) if bMemorizeMorph: dToken["lMorph"] = lMorph Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -1756,31 +1756,33 @@ <<- ->> […] && Pour indiquer une troncature de texte, on utilise usuellement des crochets. <<- ~>> * ( [re|ré] ) *WORD [ [re|ré] ] *WORD - <<- space(\3, 0, 0) ~1:3>> * + <<- space(<1, 1) and space(\3, 0, 0) ~1:3>> * [ *NUM ] [ … ] <<- ~>> * - ** [ *WORD ] ** - <<- space(\1, 1, 3) and space(\-2, 1, 3) >>> - <<- morph(\3, ":G") ~2:4>> |\2| - <<- __else__ ~2:4>> * + [ *WORD ] + <<- space(<1, 1, 3) and space(\-1, 1, 3) >>> + <<- morph(\2, ":G") ~>> |\2| + <<- __else__ ~>> * ## chapitres, références ( [*WORD|*NUM] , *NUM ) [ [*WORD|*NUM] , *NUM ] { [*WORD|*NUM] , *NUM } <<- ~>> * TEST: ce chien […] ne {{semblez}} pas en forme. TEST: ce chat {{(…)}} ne {{ressemblez}} pas aux autres. +TEST: un homme [las] {{devaient}} retrouver la joie de vivre TEST: Allons (re)voir ce film TEST: et ce malgré [une] condamnation pénale. + !! !! !!!! Virgules !! @@ -10946,15 +10948,15 @@ [ne|n’] [ma|mas] <<- /conf/ --1>> m’a && Confusion : “ma” est un déterminant possessif féminin. Pour le verbe “avoir” à la 3ᵉ personne précédé du pronom “me”, écrivez “m’a”. ça [ma|mas] *WORD - <<- /conf/ morph(<1, "|:C|>,/") and analyse(\-1, ":(?:Q|V1.*:Y)", ":N.*:[fe]") + <<- /conf/ morph(<1, "|:C|>,/") and morph0(\-1, ":(?:Q|V1.*:Y)", ":N.*:[fe]") -2>> m’a && Confusion : “ma” est un déterminant possessif féminin. Pour le verbe “avoir” à la 3ᵉ personne précédé du pronom “me”, écrivez “m’a”. qui ma *WORD - <<- /conf/ analyse(\-1, ":(?:Q|V1.*:Y)", ":N.*:[fe]") + <<- /conf/ morph0(\-1, ":(?:Q|V1.*:Y)", ":N.*:[fe]") -2>> m’a && Confusion : “ma” est un déterminant possessif féminin. Pour le verbe “avoir” à la 3ᵉ personne précédé du pronom “me”, écrivez “m’a”. ma @:(?:Q.*:e:i|V1.*:Y)¬:f:s <<- /conf/ -1>> m’a && Confusion probable : “ma” est un déterminant possessif féminin. Pour le verbe “avoir” à la 3ᵉ personne précédé du pronom “me”, écrivez “m’a”. @@ -14073,11 +14075,11 @@ [>être|>rester|>demeurer|>paraître|>paraitre|>sembler] ?[pas|plus|jamais|guère]¿ ?*WORD¿ de bon ton [de|d’] ?[ne|n’|le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~(?:é?es?|ez|ai[ts]?)$ [>être|>rester|>demeurer|>paraître|>paraitre|>sembler] ?[pas|plus|jamais|guère]¿ ?*WORD¿ de bon ton [de|d’] ?[ne|n’]¿ [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y] ~(?:é?es?|ez|ai[ts]?)$ [>être|>rester|>demeurer|>paraître|>paraitre|>sembler] ?[pas|plus|jamais|guère]¿ ?*WORD¿ de bon ton [de|d’] ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~(?:é?es?|ez|ai[ts]?)$ [>être|>rester|>demeurer|>paraître|>paraitre|>sembler] ?[pas|plus|jamais|guère]¿ ?*WORD¿ de bon ton [de|d’] ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~(?:é?es?|ez|ai[ts]?)$ [>être|>rester|>demeurer|>paraître|>paraitre|>sembler] ?[pas|plus|jamais|guère]¿ ?*WORD¿ de bon ton [de|d’] ?[ne|n’]¿ [lui|leur|y] en ~(?:é?es?|ez|ai[ts]?)$ - <<- /infi/ analyse(\-1, ":V") --1>> =suggVerbInfi(\-1) && Incohérence. Après “de bon ton de [faire quelque chose]”, le verbe doit être à l’infinitif. + <<- /infi/ morph0(\-1, ":V") --1>> =suggVerbInfi(\-1) && Incohérence. Après “de bon ton de [faire quelque chose]”, le verbe doit être à l’infinitif. TEST: il est souvent de bon ton de {{pensée}} calmement à ces choses avant de s’engager tête baissée. __imp_ne_infinitif_negadv!3__ @@ -21696,19 +21698,19 @@ ## se / ce __conf_ce_se_nom__ [de|par|pour|sans] se *WORD - <<- /conf/ analyse(\3, ":N.*:[me]:[si]", ":Y") -2>> ce && Confusion probable. Si “\-1” est bien un nom ou un adjectif, alors écrivez “ce”. + <<- /conf/ morph0(\3, ":N.*:[me]:[si]", ":Y") -2>> ce && Confusion probable. Si “\-1” est bien un nom ou un adjectif, alors écrivez “ce”. se *WORD [ne|n’|me|m’|te|t’|se|s’] se *WORD [le|la|l’|les|en|nous|vous|lui|leur|y] @:(?:[123][sp]|P)¬:G se *WORD [nous|vous] [le|la|l’|les|en|y] @:(?:[123][sp]|P) se *WORD [le|la|l’|les] [lui|leur|en|y] @:(?:[123][sp]|P) se *WORD [lui|leur|y] en @:(?:[123][sp]|P) se *WORD @:(?:[123][sp]|P)¬:G - <<- /conf/ analyse(\3, ":[NA]", ":Y") -2>> ce && Confusion probable. Si “\3” est bien un nom ou un adjectif, alors écrivez “ce”. + <<- /conf/ morph0(\3, ":[NA]", ":Y") -2>> ce && Confusion probable. Si “\3” est bien un nom ou un adjectif, alors écrivez “ce”. TEST: que sais-tu de {{se}} {{type}} TEST: {{se}} type nous emmerde. ->> ce TEST: se doit d’être fort, ce con, sinon c’est la fin pour lui. @@ -24846,11 +24848,11 @@ >avoir tendance à ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..(?:ée?s?|ez|ai[st]?)$ >avoir du mal à ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..(?:ée?s?|ez|ai[st]?)$ n’ >avoir qu’ à ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..(?:ée?s?|ez|ai[st]?)$ de [façon|manière] à ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..(?:ée?s?|ez|ai[st]?)$ enclin à ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..(?:ée?s?|ez|ai[st]?)$ - <<- /infi/ analyse(\-1, ":V", ":M") and not (\-1.endswith("ez") and value(>1, "|vous|")) + <<- /infi/ morph0(\-1, ":V", ":M") and not (\-1.endswith("ez") and value(>1, "|vous|")) --1>> =suggVerbInfi(\-1) && S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif. TEST: de manière à {{obligé}} ces gens TEST: ils ont intérêt à {{obligés}} ces gens TEST: Tous ceux qui ont du mal à {{obligé}} ces gens @@ -24875,14 +24877,14 @@ [par|pour|sans] [nous|vous|lui] ~(?:ée?s?|ez)$ <<- /infi/ morph(\3, ":V1", ":M") -3>> =suggVerbInfi(\3) && Après la préposition “\1”, le verbe devrait probablement être à l’infinitif. [par|sans] ~..(?:ée?s?|ez|ai[st]?)$ - <<- /infi/ analyse(\-1, ":V1.*:(?:Q|[123][sp])", ":[NM]") --1>> =suggVerbInfi(\-1) && Après la préposition “\1”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":V1.*:(?:Q|[123][sp])", ":[NM]") --1>> =suggVerbInfi(\-1) && Après la préposition “\1”, le verbe devrait être à l’infinitif. pour ~..(?:ée?s?|ez|ai[st]?)$ - <<- /infi/ not morph(<1, ">(?:passer|tenir)/") and analyse(\-1, ":V1.*:(?:Q|[123][sp])", ":[NM]") + <<- /infi/ not morph(<1, ">(?:passer|tenir)/") and morph0(\-1, ":V1.*:(?:Q|[123][sp])", ":[NM]") --1>> =suggVerbInfi(\-1) && Après la préposition “\1”, le verbe devrait être à l’infinitif. sans pour autant ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ée?s?|ez|ai[st]?)$ sans pour autant [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~..(?:ée?s?|ez|ai[st]?)$ sans pour autant [le|la|l’|les] [lui|leur|en|y] ~..(?:ée?s?|ez|ai[st]?)$ @@ -24995,11 +24997,11 @@ __infi_verbe_de_verbe__ [>accuser|>arrêter|>cesser|>choisir|>commander|>continuer|>craindre|>décider|>défendre|>demander|>envisager|>essayer|>éviter|>exiger|>interdire|>jurer|>omettre|>oublier|>permettre|>prévoir|>promettre|>refuser|>suggérer|>tenter] || [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ *WORD - <<- /infi/ not morph(\1, ":N") and (analyse(\-1, ":V1.*:Q", ":(?:M|Oo)") or analyse(\-1, ":[123][sp]", ":[MNGA]")) + <<- /infi/ not morph(\1, ":N") and (morph0(\-1, ":V1.*:Q", ":(?:M|Oo)") or morph0(\-1, ":[123][sp]", ":[MNGA]")) --1>> =suggVerbInfi(\-1) && Après “\1 de”, le verbe devrait être à l’infinitif. TEST: cessez d’{{anesthésié}} ces gens ! TEST: arrête d’y {{consacré}} autant de temps. TEST: Il tentait de {{raisonné}} en homme libre @@ -25025,138 +25027,138 @@ __infi_qqch_de__ afin [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ avant ?même¿ [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ marre [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\1 de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\1 de”, le verbe devrait être à l’infinitif. à [condition|défaut|dessein|fin|force|même] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “à \2 de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “à \2 de”, le verbe devrait être à l’infinitif. à deux doigts [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “à deux doigts de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “à deux doigts de”, le verbe devrait être à l’infinitif. à >seul >fin [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “à seule fin de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “à seule fin de”, le verbe devrait être à l’infinitif. au␣lieu [de|d’] ?[le|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “au lieu de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “au lieu de”, le verbe devrait être à l’infinitif. au␣lieu [de|d’] [l’|la|leur] ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “au lieu de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “au lieu de”, le verbe devrait être à l’infinitif. >avoir l’ air [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir l’air de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir l’air de”, le verbe devrait être à l’infinitif. >avoir la chance [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir la chance de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir la chance de”, le verbe devrait être à l’infinitif. >avoir le droit [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir le droit de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir le droit de”, le verbe devrait être à l’infinitif. >avoir ?toute¿ hâte [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir hâte de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir hâte de”, le verbe devrait être à l’infinitif. >avoir ?tout¿ lieu [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir lieu de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir lieu de”, le verbe devrait être à l’infinitif. >avoir ?tout¿ loisir [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir loisir de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir loisir de”, le verbe devrait être à l’infinitif. >avoir tôt fait [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir tôt fait de”, le verbe devrait être à l’infinitif.|https://fr.wiktionary.org/wiki/avoir_t%C3%B4t_fait_de + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir tôt fait de”, le verbe devrait être à l’infinitif.|https://fr.wiktionary.org/wiki/avoir_t%C3%B4t_fait_de >avoir besoin [de|d’] [le|les|nous|vous|lui] ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir besoin de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir besoin de”, le verbe devrait être à l’infinitif. >avoir besoin [de|d’] ?[l’|la|leur]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “avoir besoin de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “avoir besoin de”, le verbe devrait être à l’infinitif. >avoir d’ >autre choix [que|qu’] ?[de|d’]¿ ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir d’autre choix que”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir d’autre choix que”, le verbe devrait être à l’infinitif. >avoir la présence d’ esprit [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir vite fait de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir vite fait de”, le verbe devrait être à l’infinitif. >avoir [peur|raison] [de|d’] ?[le|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir \2 de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir \2 de”, le verbe devrait être à l’infinitif. >avoir [peur|raison] [de|d’] [l’|la|leur] ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “avoir \2 de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “avoir \2 de”, le verbe devrait être à l’infinitif. point [ne|n’] >être besoin [de|d’] ?[le|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “point n’est besoin de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “point n’est besoin de”, le verbe devrait être à l’infinitif. point [ne|n’] >être besoin [de|d’] [l’|la|leur] ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “point n’est besoin de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “point n’est besoin de”, le verbe devrait être à l’infinitif. >avoir vite fait [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir vite fait de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “avoir vite fait de”, le verbe devrait être à l’infinitif. n’ >avoir de cesse [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “n’avoir de cesse de”, le verbe devrait être à l’infinitif.|https://fr.wiktionary.org/wiki/n%E2%80%99avoir_de_cesse + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “n’avoir de cesse de”, le verbe devrait être à l’infinitif.|https://fr.wiktionary.org/wiki/n%E2%80%99avoir_de_cesse [de|d’] crainte [de|d’] ?[le|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “de crainte de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “de crainte de”, le verbe devrait être à l’infinitif. [de|d’] crainte [de|d’] [l’|la|leur] ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “de crainte de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “de crainte de”, le verbe devrait être à l’infinitif. en [droit|état|mesure|train|vue] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\1 \2 de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\1 \2 de”, le verbe devrait être à l’infinitif. >faire [exprès|semblant|mine] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “faire \2 de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “faire \2 de”, le verbe devrait être à l’infinitif. >faire fort [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") and (value(<1, "|me|m’|te|t’|se|s’|") or (value(<1, "|nous|") and value(<2, "|nous|")) or (value(<1, "|vous|") and value(<2, "|vous|"))) - --1>> =suggVerbInfi(\-1) && Après “se faire fort de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") and (value(<1, "|me|m’|te|t’|se|s’|") or (value(<1, "|nous|") and value(<2, "|nous|")) or (value(<1, "|vous|") and value(<2, "|vous|"))) + --1>> =suggVerbInfi(\-1) && Après “se faire fort de”, le verbe devrait être à l’infinitif. [>façon|>manière] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ [>intention|>volonté] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\1 de”, le verbe devrait être à l’infinitif s’il s’agit bien de décrire une action. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\1 de”, le verbe devrait être à l’infinitif s’il s’agit bien de décrire une action. hors d’ état [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “hors d’état de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “hors d’état de”, le verbe devrait être à l’infinitif. hors de question [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “hors de question de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “hors de question de”, le verbe devrait être à l’infinitif. il >être [temps|admissible|inadmissible|absurde|contraignant|libérateur|difficile|facile|impossible|indispensable|nécessaire|possible|utile|inutile] || [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “il est \3 de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “il est \3 de”, le verbe devrait être à l’infinitif. il ?n’¿ >être question [de|d’] ?[le|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “il (n’)est (pas) question de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “il (n’)est (pas) question de”, le verbe devrait être à l’infinitif. il ?n’¿ >être question [de|d’] [l’|la|leur] ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “il (n’)est (pas) question de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “il (n’)est (pas) question de”, le verbe devrait être à l’infinitif. pas question [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “pas question de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “pas question de”, le verbe devrait être à l’infinitif. [|,|(] [>capable|>incapable|impossible|inutile|>libre] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\2 de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\2 de”, le verbe devrait être à l’infinitif. [|,|(] >libre à [moi|toi|lui|elle|soi|nous|vous|eux|elles] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\2 de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “\2 de”, le verbe devrait être à l’infinitif. force [est|était|fut|serait|sera] [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ not value(<1, "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and analyse(\-1, ":Q", ":M") + <<- /infi/ not value(<1, "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “force est de”, le verbe devrait être à l’infinitif. non >content [de|d’] ?[le|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “non content de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “non content de”, le verbe devrait être à l’infinitif. non >content [de|d’] [l’|la|leur] ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “non content de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1) && Après “non content de”, le verbe devrait être à l’infinitif. >prendre garde [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “prendre garde de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “prendre garde de”, le verbe devrait être à l’infinitif. sous peine [de|d’] ?[le|l’|la|leur|les|nous|vous|lui]¿ ~..ée?s?$ - <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “sous peine de”, le verbe devrait être à l’infinitif. + <<- /infi/ morph0(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1) && Après “sous peine de”, le verbe devrait être à l’infinitif. TEST: à deux doigts de la {{dénoncée}} aux autorités ->> dénoncer TEST: afin de leur {{percée}} une ouverture ->> percer TEST: en train de {{percées}} ->> percer TEST: au lieu de la {{travaillée}}, elle restait les bras ballants ->> travailler @@ -25663,11 +25665,11 @@ mieux ?[ne|n’]¿ >valoir ?[ne|n’|le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ée?s?|ez|ai[ts]?)$ mieux ?[ne|n’]¿ >valoir ?[ne|n’]¿ [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y] ~..(?:ée?s?|ez|ai[ts]?)$ mieux ?[ne|n’]¿ >valoir ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] ~..(?:ée?s?|ez|ai[ts]?)$ mieux ?[ne|n’]¿ >valoir ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] ~..(?:ée?s?|ez|ai[ts]?)$ mieux ?[ne|n’]¿ >valoir ?[ne|n’]¿ [lui|leur|y] en ~..(?:ée?s?|ez|ai[ts]?)$ - <<- /infi/ analyse(\-1, ":V1.*:(?:Q|[123][sp])", ":[GM]") + <<- /infi/ morph0(\-1, ":V1.*:(?:Q|[123][sp])", ":[GM]") --1>> =suggVerbInfi(\-1) && Après “mieux vaut…”, le verbe devrait être à l’infinitif. TEST: Mieux vaut {{consacré}} son temps à des occupations utiles. TEST: Mieux ne vaut pas {{arrivé}} en retard. TEST: il eût mieux valu {{oublié}} cette affaire plutôt que réveiller ce dragon endormi. @@ -29139,18 +29141,18 @@ [ne|n’] [le|la|l’|les] [lui|leur|en|y] ~\w\w+t$ [ne|n’] [lui|leur] en ~\w\w+t$ <<- /imp/ not value(>1, "|il|elle|on|ils|elles|iel|iels|") and not value(\-1, "|provient|") and not (value(\-1, "|vient|dit|surgit|survient|périt|") and morph(>1, ":(?:[MD]|Oo)|>[A-Z]/")) - and morph(\-1, ":V[23].*:Ip.*:3s", ":G|>(?:devoir|suffire|para[îi]tre)/") and analyseWord(\-1[:-1]+"s", ":E:2s") + and morph(\-1, ":V[23].*:Ip.*:3s", ":G|>(?:devoir|suffire|para[îi]tre)/") and analyse(\-1[:-1]+"s", ":E:2s") --1>> =\-1[:-1]+"s" && S’il s’agit d’un impératif, la terminaison est “s”, non “t”. ~\w\w+t$ <<- /imp/ not value(>1, "|il|elle|on|ils|elles|iel|iels|") and not value(\-1, "|provient|") and not (value(\-1, "|vient|dit|surgit|survient|périt|") and morph(>1, ":(?:[MDR]|Oo)|>[A-Z]/")) - and morph(\-1, ":V[23].*:Ip.*:3s", ":[GNA]|>(?:devoir|suffire|para[îi]tre)/") and analyseWord(\-1[:-1]+"s", ":E:2s") + and morph(\-1, ":V[23].*:Ip.*:3s", ":[GNA]|>(?:devoir|suffire|para[îi]tre)/") and analyse(\-1[:-1]+"s", ":E:2s") --1>> =\-1[:-1]+"s" && S’il s’agit d’un impératif, la terminaison est “s”, non “t”. TEST: {{Finit}} ton assiette. ->> Finis TEST: Ne {{pourrit}} pas l’ambiance. ->> pourris TEST: Ne {{finit}} pas ce devoir. 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(?:VC|)|stem|tag|value|space|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' + - match: '\b(?:spell|morph(?:VC|)|stem|tag|value|space|textarea0?\w*|before0?\w*|after0?\w*|word|option|define(?:from|)|select|exclude|setmeta|analyse|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