Index: gc_lang/fr/rules.grx
==================================================================
--- gc_lang/fr/rules.grx
+++ gc_lang/fr/rules.grx
@@ -3099,10 +3099,17 @@
 
 __da_pourvu__
     pourvu
         <<- not value(>1, "|que|qu’|") =>> select(\1, "", ":G")
 
+__da_pouvoir_savoir_vouloir__
+    [un|le|ce|du|quel|mon|ton|son|notre|votre|leur] [pouvoir|savoir|vouloir]
+        <<- =>> select(\-1, ":N")
+
+    [un|le|ce|du|quel|mon|ton|son|notre|votre|leur] *WORD [pouvoir|savoir|vouloir]
+        <<- morph(\2, ":A.*:[me]:[si]") =>> select(\-1, ":N")
+
 __da_puis__
     puis
         <<- not value(<1, "|je|ne|n’|le|l’|leur|") =>> select(\1, "", ":V")
 
 __da_quelque__
@@ -11446,11 +11453,11 @@
         <<- /conf/ ->> nez à nez                            && Confusion. Locution “nez à nez”.|https://fr.wiktionary.org/wiki/nez_%C3%A0_nez
 
     [à|a] [mon|ton|son|notre|votre|leur] né
     au [né+ses]
     [dans|sur|sous] le [né+ses]
-    >crotte [de|d’] [né+ses]
+    [>crotte|>pied] [de|d’] [né+ses]
     >saignement [de|d’] [né+ses]
     [>mettre|>fourrer] ?@:[WX]¿ [le|mon|ton|son|notre|votre|leur] [né+ses]
     >pendre ?@:[WX]¿ [au|aux] [né+s]
     >voir ?@:[WX]¿ plus loin [que|qu’] [le|mon|ton|son|notre|votre|leur] [né+ses]
     >voir ?@:[WX]¿ plus loin [que|qu’] le bout [de|d’] [mon|ton|son|notre|votre|leur] [né+ses]
@@ -22845,10 +22852,13 @@
         && Confusion probable. Une vis est une pièce mécanique destinée à être vissée. Si vous parlez d’existence, écrivez “vie”.|https://fr.wiktionary.org/wiki/vie
 
     >donner  [signe+s]  [de|d’]  [vis|vit|vies]
         <<- /conf/ --1>> vie                                    && Locution “donner signe de vie”.|https://fr.wiktionary.org/wiki/ne_pas_donner_signe_de_vie
 
+    >sauver @:D.*:[fe] [vis|vit]
+        <<- /conf/ --1>> vie|vies                               && Confusion probable. Sauver une existence, c’est-à-dire une vie.|https://fr.wiktionary.org/wiki/vie
+
     !! >question [de|d’] vie [ou|et] [de|d’] mort ¡¡
     >question de [vis|vit|vie+s] [ou|et] de [mort+s|mors|mord+s|maure+s]
         <<- /conf/ -2:0>> de vie \-3 de mort                    && Locution “une question de vie ou/et de mort”.
 
     !! [droit+s] [de|d’] vie et [de|d’] mort ¡¡
@@ -22861,10 +22871,11 @@
         --1>> vit                                               && Confusion probable. Le verbe “vivre” s’écrit “vit” à la 3ᵉ personne du singulier.
 
 TEST: elle a mené une {{vis}} insignifiante                     ->> vie
 TEST: quelle {{vis}} incroyable !                               ->> vie
 TEST: elle donne rarement signe de {{vis}}                      ->> vie
+TEST: sauver des {{vis}}, c’est vital pour elle                 ->> vie|vies
 TEST: une question {{de vie ou de mors}}                        ->> de vie ou de mort
 TEST: avoir droit {{de vis et de mors}}                         ->> de vie et de mort
 TEST: l’homme {{vie}} ses derniers instants                     ->> vit
 TEST: le sortilège “vie de merde” n’eut aucun effet
 TEST: c’est comme toujours une question de vie ou de mort
@@ -23018,13 +23029,14 @@
 TEST: j’aide l’homme et par amour pour lui le laisse libre.
 
 
 __gn_le_1m__
     ,  le  *WORD
+        <<- /gn/ morph(\2, ":D") >>>
         <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\3)           && Accord de genre erroné : « \3 » est féminin.
         <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            && Accord de genre erroné : « \2 » est un déterminant masculin.
-        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               && Accord de nombre erroné : « \3 » devrait être au singulier.
+        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":(?:[siPGWY]|[123][sp])") -3>> =suggMasSing(\3)   && Accord de nombre erroné : « \3 » devrait être au singulier.
         <<- /gn/ __also__ -2>> les                                                                  && Accord de nombre erroné : « \3 » est au pluriel.
 
     *WORD  le  *WORD
         <<- /gn/ morph(\2, ":D") >>>
         <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
@@ -23035,11 +23047,11 @@
             or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RCY]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
         -3>> =suggMasSing(\3)                                                                       && Accord de nombre erroné : « \3 » devrait être au singulier.
         <<- /gn/ __also__ -2>> les                                                                  && Accord de nombre erroné : « \3 » est au pluriel.
 
     <start>  le  *WORD
-        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\3)                     && Accord de genre erroné : « \3 » est féminin.
+        <<- /gn/ morph(\3, ":[NA].*:f", ":[emPGWMY]") -2>> =suggLesLa(\3)                           && Accord de genre erroné : « \3 » est féminin.
         <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            && Accord de genre erroné : « \2 » est un déterminant masculin.
         <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               && Accord de nombre erroné : « \3 » devrait être au singulier.
         <<- /gn/ __also__ -2>> les                                                                  && Accord de nombre erroné : « \3 » est au pluriel.
 
 TEST: c’est une catastrophe, {{le}} {{profits}} a baissé ces deux derniers trimestres   ->> les|||profit
@@ -23052,10 +23064,11 @@
 TEST: {{le}} {{publique}}                                                               ->> la|||public
 TEST: {{Le}} {{pendue}}                                                                 ->> La|||pendu
 TEST: {{Le}} personne répond.                                                           ->> La
 TEST: {{le}} {{quotients}}                                                              ->> les|||quotient
 TEST: Comme avec l’Hyperloop, le bus chinois conçu pour passer au-dessus des voitures
+TEST: Je le levai, le brandis et frappai de taille.
 
 
 __gn_le_2m__
     le  *WORD  *WORD
         <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|") and not morph(\3, ">seul/") >>>
@@ -23111,13 +23124,14 @@
 TEST: le prétentieux et sot {{hommes}} que voilà                                        ->> homme
 
 
 __gn_la_1m__
     ,  la  *WORD
-        <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|P|G|W|M|[1-3][sp]|Y)") -2>> le             && Accord de genre erroné : « \3 » est masculin.
-        <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemSing(\3, True)                    && Accord de genre erroné : « \2 » est un déterminant féminin.
-        <<- /gn/ __else__ and morph(\3, ":[NA].*:p") -3>> =suggFemSing(\3)                  && Accord de nombre erroné : « \3 » devrait être au singulier.
+        <<- /gn/ morph(\2, ":D") >>>
+        <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|P|G|W|M|[1-3][sp]|Y)") -2>> le                         && Accord de genre erroné : « \3 » est masculin.
+        <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemSing(\3, True)                                && Accord de genre erroné : « \2 » est un déterminant féminin.
+        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":(?:[siPGWY]|[123][sp])") -3>> =suggFemSing(\3)   && Accord de nombre erroné : « \3 » devrait être au singulier.
 
     *WORD  la  *WORD
         <<- /gn/ morph(\2, ":D") >>>
         <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|P|G|W|M|[1-3][sp]|Y)")
             or ( morph(\3, ":[NA].*:m", ":[Mfe]") and morph(\1, ":[RCY]", ">(?:e[tn]|ou)/") and not (morph(\1, ":(?:Rv|C)") and morph(\3, ":Y")) )
@@ -23148,10 +23162,11 @@
 TEST: {{le}} {{doctoresse}} est là.                             ->> la|||docteur
 TEST: la force de la {{formes}} parfaite                        ->> forme|formée
 TEST: à la Richard Nixon Foundation
 TEST: à ne plus se laisser faire la fois d’après
 TEST: il pense à la fois où nous avons eu cet accident idiot.
+TEST: Je la levai, la brandis et frappai de taille.
 
 
 __gn_la_2m__
     la  *WORD  *WORD
         <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
@@ -24625,12 +24640,12 @@
         <<- /gn/ morph(\2, ":A", ":(?:A.*:[fe]:[si]|G|W)|;C") -2>> =suggFemSing(\2, True)           && Cet adjectif n’est pas accordé avec le nom “\-1”.
         <<- /gn/ morph(\4, ":A", ":(?:A.*:[fe]:[si]|G|W)|;C") -4>> =suggFemSing(\4, True)           && Cet adjectif n’est pas accordé avec le nom “\-1”.
 
     <start> *WORD et *WORD  @:N.*:e:s¬*
         <<- /gn/ morph(\2, ":A", ":G") and morph(\4, ":A", ":G") >>>
-        <<- /gn/ morph(\2, ":A", ":(?:A.*:[si]|G|W)|;C") -2>> =suggSing(\2, True)                  && Cet adjectif n’est pas accordé avec le nom “\-1”.
-        <<- /gn/ morph(\4, ":A", ":(?:A.*:[si]|G|W)|;C") -4>> =suggSing(\4, True)                  && Cet adjectif n’est pas accordé avec le nom “\-1”.
+        <<- /gn/ morph(\2, ":A", ":(?:A.*:[si]|G|W)|;C") -2>> =suggSing(\2, True)                   && Cet adjectif n’est pas accordé avec le nom “\-1”.
+        <<- /gn/ morph(\4, ":A", ":(?:A.*:[si]|G|W)|;C") -4>> =suggSing(\4, True)                   && Cet adjectif n’est pas accordé avec le nom “\-1”.
 
     <start> *WORD et *WORD  @:N.*:m:p¬*
         <<- /gn/ morph(\2, ":A", ":G") and morph(\4, ":A", ":G") >>>
         <<- /gn/ morph(\2, ":A", ":(?:A.*:[me]:[pi]|G|W)|;C") -2>> =suggMasPlur(\2, True)           && Cet adjectif n’est pas accordé avec le nom “\-1”.
         <<- /gn/ morph(\4, ":A", ":(?:A.*:[me]:[pi]|G|W)|;C") -4>> =suggMasPlur(\4, True)           && Cet adjectif n’est pas accordé avec le nom “\-1”.
@@ -25793,10 +25808,11 @@
 TEST: {{lorsque}} l’horloge {{sonnée}}, nous nous levions à la hâte
 TEST: {{quand}} les croissants {{arrivés}}, on se jetait dessus
 TEST: {{lorsque}} certains idiots {{oubliés}}, on riait aux éclats
 TEST: {{lorsque}} ton code {{grossi}}, il faut le factoriser
 TEST: quand le jour venu, il fallut se battre, nous étions prêts.
+TEST: quand ce fut fait, il lui manqua la force de répliquer.
 
 
 __conf_qui_pronom_verbe__
     qui  [lui|nous|vous]  @:[NA]¬:(?:[123][sp]|P)
         <<- /conf/ hasSimil(\-1, ":(?:[123][sp]|P)") --1>> =suggSimil(\-1, ":[123][sp]")            && Confusion probable : “\-1” n’est pas une forme verbale conjuguée.
@@ -26416,18 +26432,18 @@
 __infi_pouvoir!5__
     >pouvoir  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~..(?:ée?s?|ez)$
     >pouvoir  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~..(?:ée?s?|ez)$
     >pouvoir  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]             ~..(?:ée?s?|ez)$
     >pouvoir  ?[ne|n’]¿  [lui|leur|y]                    en                          ~..(?:ée?s?|ez)$
-        <<- /infi/ not value(\1, "|puis|pouvoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D"))
+        <<- /infi/ morph(\1, ":V", ">puis/") and morph(\-1, ":V", ":M")
         --1>> =suggVerbInfi(\-1)                                                                    && S’il s’agit d’une action que le sujet peut accomplir, le verbe devrait être à l’infinitif.
 
     >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 tagbefore(\1, "_ceque_")
+        <<- /infi/ morph(\1, ":V", ">puis/") and morph(\-1, ":V", ":M") 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)$
@@ -26439,10 +26455,11 @@
 TEST: ils peuvent nous {{marchaient}} sur les pieds                                     ->> marcher
 TEST: Il doit pouvoir {{détectez}} ces erreurs.                                         ->> détecter
 TEST: elle rêve de pouvoir les {{brisés}} à mains nues                                  ->> briser
 TEST: un homme de pouvoir débordé par ses obligations.
 TEST: faire seulement ce que tu pouvais ne satisfaisait pas tes patrons.
+TEST: un immense pouvoir l’animait.
 
 
 __infi_savoir!5__
     >savoir  ?[que|qu’|quoi]¿  ~..(?:ée?s?|ez)$
     >savoir  ?[que|qu’|quoi]¿  ~..(?:ée?s?|ez)$
@@ -29137,13 +29154,13 @@
     [<start>|,|(|/_start_]  ($:M)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿           (/_VE_)                                                 @:[AQ]¬:[GMW]
     [<start>|,|(|/_start_]  ($:M)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿           (/_LVED_) ?/_LVE_¿ ?/_LVE_¿ ?/_LVE_¿ ?/_LVE_¿ /_LVEF_   @:[AQ]¬:[GMW]
     [<start>|,|(|/_start_]  ($:M)  ?qui¿  ?[ne|n’]¿  [se|s’]  ?[en|y]¿  (/_VEP_)                                                @:[AQ]¬:[GMW]
     [<start>|,|(|/_start_]  ($:M)  ?qui¿  ?[ne|n’]¿  [se|s’]  ?[en|y]¿  (/_LVEPD_) ?/_LVEP_¿ ?/_LVEP_¿ ?/_LVEP_¿ /_LVEPF_       @:[AQ]¬:[GMW]
         <<- /ppas/ not tag(\1, "_enum_") and not value(\-1, "|légion|pléthore|néant|réalité|") and (morph(\2, ":[123]s") or (not tag(\1, "_enum_") and morph(\2, ":P"))) >>>
-        <<- /ppas/ morph(\1, ":M.*:f", ":[me]") and morph(\-1, ":[AQ].*:m", ":[fe]") --1>> =suggFemSing(\-1)                && Accord erroné : “\1” et “\-1” ne sont pas accordés. Mettez au féminin pluriel.
-        <<- /ppas/ __else__ and morph(\1, ":M.*:m", ":[fe]") and morph(\-1, ":[AQ].*:f", ":[me]") --1>> =suggMasSing(\-1)   && Accord erroné : “\1” et “\-1” ne sont pas accordés. Mettez au masculin pluriel.
-        <<- /ppas/ __else__ and morph(\-1, ":p", ":[AQ].*:[si]") --1>> =suggSing(\-1)                                       && Accord erroné : “\1” et “\-1” ne sont pas accordés. Mettez au pluriel.
+        <<- /ppas/ morph(\1, ":M.*:f", ":[me]") and morph(\-1, ":[AQ].*:m", ":[fe]") --1>> =suggFemSing(\-1)                && Accord erroné : “\1” et “\-1” ne sont pas accordés. Mettez au féminin singulier.
+        <<- /ppas/ __else__ and morph(\1, ":M.*:m", ":[fe]") and morph(\-1, ":[AQ].*:f", ":[me]") --1>> =suggMasSing(\-1)   && Accord erroné : “\1” et “\-1” ne sont pas accordés. Mettez au masculin singulier.
+        <<- /ppas/ __else__ and morph(\-1, ":p", ":[AQ].*:[si]") --1>> =suggSing(\-1)                                       && Accord erroné : “\1” et “\-1” ne sont pas accordés. Mettez au singulier.
 
 TEST: Marianne semble devenue {{colériques}}
 TEST: Pauline n’affirme pas avoir été {{vaincu}} pour autant
 TEST: Sara n’en croit pas cependant être devenue {{aigries}}
 TEST: Patrick est devenu {{folles}}