Grammalecte  Check-in [0aa00f3c96]

Overview
Comment:[fr] merge fr_killtricks: fin de la dette technique des versions précédentes. La désambiguïsation ne se fait plus par le processeur de texte, mais uniquement via le désambiguïsateur
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | major_change
Files: files | file ages | folders
SHA3-256: 0aa00f3c96b413f724b1da33c407387900218c7d45c421998633a450d030eb04
User & Date: olr on 2017-09-12 18:52:21
Other Links: manifest | tags
Context
2017-09-12
21:17
[fr] màj: locutions considérées comme prépositions check-in: ba9c538626 user: olr tags: fr, trunk
18:52
[fr] merge fr_killtricks: fin de la dette technique des versions précédentes. La désambiguïsation ne se fait plus par le processeur de texte, mais uniquement via le désambiguïsateur check-in: 0aa00f3c96 user: olr tags: fr, major_change, trunk
18:43
[fr] désambiguïsation des pronoms objets le/la/les/leur, contrôle des groupes nominaux avec les mêmes articles Closed-Leaf check-in: cfafaebaf8 user: olr tags: fr, fr_killtricks
10:31
[fx] WebExt: message when no error detected. check-in: c51bc21a0d user: olr tags: fx, trunk
Changes

Modified gc_lang/fr/rules.grx from [56614b8022] to [88b567d1fe].

  1734   1734   !!!
  1735   1735   
  1736   1736   # mots grammaticaux
  1737   1737   __[i](d_dans)__
  1738   1738       dans
  1739   1739       <<- not morph(word(-1), ":D.*:p|>[a-z]+ièmes ", False, False) =>> select(\0, ":R")
  1740   1740   
         1741  +# Pronoms le/la/les
         1742  +__[i](p_astuce_je_le_la_les)__
         1743  +    je (l(?:e(?:ur|s|)|a)) @@$                  <<- not morph(word(-1), ":1s", False, False) =>> select(\1, ":Oo")
         1744  +__[i](p_astuce_tu_le_la_les)__
         1745  +    tu (l(?:e(?:ur|s|)|a)) @@$                  <<- not morph(word(-1), ":2s", False, False) =>> select(\1, ":Oo")
         1746  +__[i](p_astuce_il_elle_on_le_la_les)__
         1747  +    (?:il|elle|on) (l(?:e(?:ur|s|)|a)) @@$      <<- not morph(word(-1), ":3s", False, False) =>> select(\1, ":Oo")
         1748  +__[i](p_astuce_nous_le_la_les)__
         1749  +    nous (l(?:e(?:ur|s|)|a)) @@$                <<- not morph(word(-1), ":1p", False, False) =>> select(\1, ":Oo")
         1750  +__[i](p_astuce_vous_le_la_les)__
         1751  +    vous (l(?:e(?:ur|s|)|a)) @@$                <<- not morph(word(-1), ":2p", False, False) =>> select(\1, ":Oo")
         1752  +__[i](p_astuce_ils_elles_le_la_les)__
         1753  +    (?:ils|elles) (l(?:e(?:ur|s|)|a)) @@$       <<- not morph(word(-1), ":3p", False, False) =>> select(\1, ":Oo")
         1754  +__[i]__
         1755  +    [nmts]e (l(?:e(?:ur|s|)|a)) @@$             <<- =>> =select(\1, ":Oo")
         1756  +
  1741   1757   # verbe
  1742   1758   __[i](d_ne_verbe)__
  1743   1759       ne +(?:l(?:es? |eurs? |ui |a |’)|[nv]ous |)({w_1}) @@$
  1744   1760       <<- not morph(\1, ":(?:O[sp]|X)", False) =>> select(\1, ":V")
  1745   1761   __[i](d_n_m_t_s_verbe)__
  1746   1762       [nmts]’(?:en +|y +|)({w_1}) @@$
  1747   1763       <<- not morph(\1, ":X", False) =>> select(\1, ":V")
................................................................................
  3713   3729       <<- -1>> =\1.replace("pal", "pâl")
  3714   3730       # Utilisez “pâle” pour évoquer la pâleur… Une pale est, entre autres choses, un élément d’une hélice.|http://fr.wiktionary.org/wiki/pale
  3715   3731   
  3716   3732   TEST: elles sont si {{pales}}.
  3717   3733   TEST: cette {{pale}} imitation d’un chef-d’œuvre
  3718   3734   
  3719   3735   
  3720         -
  3721         -
  3722   3736   # peu / peux / peut / peut-être
  3723   3737   __[i]/conf(conf_peut_adv)__
  3724   3738       (?<![dDuUnN][eEnN] )(peu) (?:pas|donc|jamais|rien|parfois|alors|enfin|rarement|éventuellement) @@0
  3725   3739       <<- not before("très +$") -1>> peut                                     # Confusion probable : « peu » signifie « pas beaucoup », pour le verbe pouvoir, écrivez :
  3726   3740   __[i]/conf(conf_il_ce_peut_être)!6__
  3727   3741       ^ *(?:il|ce) (peut-être) @@$
  3728   3742       <<- -1>> peut être                                                      # Confusion probable : « peut-être » signifie « possiblement ».
................................................................................
  3998   4012   TEST: Quelle chance tu as eue de voir ruiné ce connard.
  3999   4013   TEST: l’immobilier a été ces dernières années l’investissement le plus rentable (voir graphique ci-dessous)
  4000   4014   TEST: elles sont pas mal ainsi, voire élégantes pourrait-on dire.
  4001   4015   TEST: il y en a peu, voire très peu.
  4002   4016   TEST: car elles pénètrent dans les poumons voire le système sanguin.
  4003   4017   TEST: des enfants malades, qui préfèrent souvent voir Dark Vador que des vieux clowns un peu flippants.
  4004   4018   
  4005         -
  4006         -
  4007         -#### Pronoms
         4019  +!!
         4020  +!!
         4021  +!!!! Pronoms + incohérences                                                                         
         4022  +!!
         4023  +!!
  4008   4024   __[i](p_m_enfin)__      m’enfin <<- ~>> *
  4009   4025   
  4010   4026   __[i]/conf(conf_j_y_en_qqch)__
  4011   4027       (j’(?:en +|y +|))({w_1})  @@0,$
  4012   4028       <<- morphex(\2, ":", ":(?:[123][sp]|O[onw])")
  4013         -    -2>> =suggSimil(\2, ":1s")                                                               # Incohérence avec « \1 » : « \2 » devrait être un verbe.
         4029  +    -2>> =suggSimil(\2, ":1s")                                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe.
  4014   4030   __[i]/conf(conf_ne_qqch)__
  4015   4031       (n(?:e +|’))({w_1})  @@0,$
  4016   4032       <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)|>(?:[lmtsn]|surtout|guère|presque|même|tout|parfois|vraiment|réellement) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
  4017   4033       -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
  4018   4034   __[i]/conf(conf_n_y_en_qqch)__
  4019   4035       (n’(?:en|y)) ({w_1})  @@0,$
  4020   4036       <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
  4021   4037       -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
  4022   4038   __[i]/conf(conf_ne_pronom_qqch)__
  4023         -    (ne l(?:es? +|a +|’))({w_1})  @@0,$
         4039  +    (ne (?:l(?:es? +|eur +|a +|’)|[nv]ous))({w_1})  @@0,$
  4024   4040       <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
  4025   4041       -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
  4026   4042   __[i]/conf(conf_me_te_se_qqch)__
  4027   4043       ([mts]e +(?:les? |la |l’|))(?!voi(?:là|ci))({w_1})  @@0,$
  4028   4044       <<- not re.search("(?i)^se que?", \0)
  4029   4045       and morphex(\2, ":", ":(?:[123][sp]|Y|P|Oo)|>[lmts] ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
  4030   4046       -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
................................................................................
  4065   4081   TEST: je t’en {{parlé}}
  4066   4082   TEST: M’enfin, c’est absurde
  4067   4083   TEST: il est normal de ne presque pas payer des gens qui effectuent un travail
  4068   4084   TEST: j’ai l’impression de ne même pas savoir ce qu’est un « juif français ».
  4069   4085   TEST: C’que j’comprends, c’est qu’il y a des limites à ce qu’on peut supporter.
  4070   4086   TEST: la tentation pour certains médias de ne tout simplement pas rémunérer notre travail si celui-ci n’est finalement pas publié.
  4071   4087   TEST: Ne parfois pas être celui qui sabote l’ambiance.
         4088  +
  4072   4089   
  4073   4090   !!
  4074   4091   !!
  4075   4092   !!!! Formes verbales sans sujet                                                                     
  4076   4093   !!
  4077   4094   !!
  4078   4095   
................................................................................
  4945   4962       <<- not morph(\2, ":A", False) ~1>> *
  4946   4963   __[i](p_verbe_pronom_être)__
  4947   4964       (d[eouû]\w+|cr[ouû]\w+|pens\w+|imagin\w+|estim\w+) (l(?:eur|ui)|nous|vous) être @@0,w
  4948   4965       <<- morph(\1, ">(?:croire|devoir|estimer|imaginer|penser) ") ~2>> *
  4949   4966   __[i](p_en_partie)__
  4950   4967       (en partie) ({w_2}) @@0,$
  4951   4968       <<- morph(\1, ":(?:R|D|[123]s|X)", False) ~1>> *
         4969  +__[i](p_en_plus)__
         4970  +    en plus
         4971  +    <<- morph(word(1), ":A", False, True) ~>> en
         4972  +    <<- __else__ ~>> *
  4952   4973   __[i](p_en_quelques_tps1)__
  4953   4974       (en quelques (?:années|décennies|semaines|heures|minutes)) +({w_2}) @@0,$
  4954   4975       <<- not morph(\2, ":[AQ]:[ef]:[si]", False) ~1>> *
  4955   4976   __[i](p_en_quelques_tps2)__
  4956   4977       (en quelques (?:jours|mois|trimestres|semestres|siècles|millénaires)) +({w_2}) @@0,$
  4957   4978       <<- not morph(\2, ":[AQ]:[em]:[si]", False) ~1>> *
  4958   4979   __[i](p_entre_pronom_et_pronom)__
................................................................................
  5231   5252   TEST: ça peut être dans huit jours.
  5232   5253   TEST: La secrétaire d’Etat à l’égalité entre les femmes et les hommes hérite de la lutte contre les discriminations
  5233   5254   TEST: les populistes d’Europe centrale et de l’Est ont d’ores et déjà tellement réussi à compromettre les institutions de leur pays
  5234   5255   TEST: Deirdre, elle aussi légèrement ostracisée, m’interrogea.
  5235   5256   TEST: des échanges pair à pair
  5236   5257   TEST: Les 27 ont préféré tout au long de la journée vanter un nouvel espoir dans leur avenir commun.
  5237   5258   TEST: lorsqu’une campagne de malwares déployée dans un pays cible ne peut d’évidence y rester confinée.
  5238         -
  5239         -
  5240         -!!!
  5241         -!!!
  5242         -!!! Désambiguïsation (deprecated)
  5243         -!!!
  5244         -!!!
  5245         -#__[i]__  ({avoir}) +({w_1}[eiuts])  @@0,$
  5246         -#    <<- morph(\1, ":V0a", False) and morphex(\1, ":Q", ":G")
  5247         -#    =>> exclude(\2, ":A")
  5248         -
  5249         -
  5250         -### Désambiguïsation par séparation de le/la/les avec la suite s’il s’agit de COD dans les syntagmes verbaux
  5251         -__[i>(p_astuce_je_le_la_les)__
  5252         -    je l(?:es?|a)( ) @@$               <<- not morph(word(-1), ":1s", False, False) ~1>> @
  5253         -__[i>(p_astuce_tu_le_la_les)__
  5254         -    tu l(?:es?|a)( ) @@$               <<- not morph(word(-1), ":2s", False, False) ~1>> @
  5255         -__[i>(p_astuce_il_elle_on_le_la_les)__
  5256         -    (?:il|elle|on) l(?:es?|a)( ) @@$   <<- not morph(word(-1), ":3s", False, False) ~1>> @
  5257         -__[i>(p_astuce_nous_le_la_les)__
  5258         -    nous l(?:es?|a)( ) @@$             <<- not morph(word(-1), ":1p", False, False) ~1>> @
  5259         -__[i>(p_astuce_vous_le_la_les)__
  5260         -    vous l(?:es?|a)( ) @@$             <<- not morph(word(-1), ":2p", False, False) ~1>> @
  5261         -__[i>(p_astuce_ils_elles_le_la_les)__
  5262         -    (?:ils|elles) l(?:es?|a)( ) @@$    <<- not morph(word(-1), ":3p", False, False) ~1>> @
  5263         -#__[i>__  [nmts]e l(?:es?|a)( ) @@$          <<- ~1>> @
  5264         -#__[i]__  l(?:es?|a)( )({w_2}) @@*,$         <<- morph(\2, ":[123][sp]") ~1>> @
  5265         -
  5266         -
  5267   5259   TEST: comme le signe évident d’une politique volontaire
  5268   5260   TEST: c’était le signe évident d’une politique volontaire
  5269   5261   TEST: ce que c’est : le signe évident d’une politique volontaire
  5270   5262   
  5271   5263   
  5272   5264   
  5273   5265   #
................................................................................
  5328   5320       , +(le) +({w_2})  @@w,$
  5329   5321       <<- morphex(\2, ":[NAQ].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -1>> =suggLesLa(\2)                 # Accord de genre erroné : « \2 » est féminin.
  5330   5322       <<- __also__ and hasMasForm(\2) -2>> =suggMasSing(@, True)                                      # Accord de genre erroné : « \1 » est un déterminant masculin.
  5331   5323       <<- __else__ and morph(\2, ":[NAQ].*:p") -2>> =suggMasSing(@)                                   # Accord de nombre erroné : « \2 » devrait être au singulier.
  5332   5324       <<- __also__ -1>> les                                                                           # Accord de nombre erroné : « \2 » est au pluriel.
  5333   5325   __[i]/gn(gn_le_accord2)__
  5334   5326       ({w_1}) +(le) +({w_2})  @@0,w,$
         5327  +    <<- morph(\2, ":D", False) >>>
  5335   5328       <<- morphex(\3, ":[NAQ].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
  5336   5329       or ( morphex(\3, ":[NAQ].*:f", ":[me]") and morphex(\1, ":R", ">(?:e[tn]|ou) ") and not (morph(\1, ":Rv", False) and morph(\3, ":Y", False)) )
  5337   5330       -2>> =suggLesLa(\3)                                                                             # Accord de genre erroné : « \3 » est féminin.
  5338   5331       <<- __also__ and hasMasForm(\3) -3>> =suggMasSing(@, True)                                      # Accord de genre erroné : « \2 » est un déterminant masculin.
  5339   5332       <<- __else__ and morph(\3, ":[NAQ].*:p")
  5340   5333       or ( morphex(\3, ":[NAQ].*:p", ":[si]") and morphex(\1, ":[RC]", ">(?:e[tn]|ou)") and not (morph(\1, ":Rv", False) and morph(\3, ":Y", False)) )
  5341   5334       -3>> =suggMasSing(@)                                                                            # Accord de nombre erroné : « \3 » devrait être au singulier.
................................................................................
  5415   5408   __<i]/gn(gn_la_accord1)__
  5416   5409       , +(la) +({w_2})  @@w,$
  5417   5410       <<- morphex(\2, ":[NAQ].*:m", ":(?:e|f|P|G|W|[1-3][sp]|Y)") -1>> le                             # Accord de genre erroné : « \2 » est masculin.
  5418   5411       <<- __also__ and hasFemForm(\2) -2>> =suggFemSing(@, True)                                      # Accord de genre erroné : « \1 » est un déterminant féminin.
  5419   5412       <<- __else__ and morph(\2, ":[NAQ].*:p") -2>> =suggFemSing(@)                                   # Accord de nombre erroné : « \2 » devrait être au singulier.
  5420   5413   __[i]/gn(gn_la_accord2)__
  5421   5414       ({w_1}) +(la) +({w_2})  @@0,w,$
         5415  +    <<- morph(\2, ":D", False) >>>
  5422   5416       <<- morphex(\3, ":[NAQ].*:m", ":(?:e|f|P|G|W|[1-3][sp]|Y)")
  5423   5417       or ( morphex(\3, ":[NAQ].*:m", ":[fe]") and morphex(\1, ":[RC]", ">(?:e[tn]|ou) ") and not (morph(\1, ":(?:Rv|C)", False) and morph(\3, ":Y", False)) )
  5424   5418       -2>> le                                                                                         # Accord de genre erroné : « \3 » est masculin.
  5425   5419       <<- __also__ and hasFemForm(\3) -3>> =suggFemSing(@, True)                                      # Accord de genre erroné : « \2 » est un déterminant féminin.
  5426   5420       <<- __else__ and morph(\3, ":[NAQ].*:p")
  5427   5421       or ( morphex(\3, ":[NAQ].*:p", ":[si]") and morphex(\1, ":[RC]", ">(?:e[tn]|ou)") and not (morph(\1, ":Rv", False) and morph(\3, ":Y", False)) )
  5428   5422       -3>> =suggFemSing(@)                                                                            # Accord de nombre erroné : « \3 » devrait être au singulier.
................................................................................
  5526   5520   
  5527   5521   __<i]/gn(gn_leur_accord1)__
  5528   5522       , +(leur) +({w_2})  @@w,$
  5529   5523       <<- morph(\2, ":[NAQ].*:p") -1>> leurs                                                          # Accord de nombre erroné avec « \2 ».
  5530   5524       <<- __also__ -2>> =suggSing(@)                                                                  # Accord de nombre erroné : « \2 » devrait être au singulier.
  5531   5525   __[i]/gn(gn_leur_accord2)__
  5532   5526       ({w_1}) +(leur) +({w_2})  @@0,w,$
  5533         -    <<- morph(\3, ":[NAQ].*:p") or ( morphex(\3, ":[NAQ].*:p", ":[si]") and morphex(\1, ":[RC]|>de ", ">(?:e[tn]|ou)") and not (morph(\1, ":Rv", False) and morph(\3, ":Y", False)) )
         5527  +    <<- morph(\3, ":[NAQ].*:p")
         5528  +    or ( morphex(\3, ":[NAQ].*:p", ":[si]") and morphex(\1, ":[RC]|>de ", ">(?:e[tn]|ou)") and not (morph(\1, ":Rv", False) and morph(\3, ":Y", False)) )
  5534   5529       -2>> leurs                                                                                      # Accord de nombre erroné avec « \3 ».
  5535   5530       <<- __also__ -3>> =suggSing(@)                                                                  # Accord de nombre erroné : « \3 » devrait être au singulier.
  5536   5531   __<i]/gn(gn_leur_accord3)__
  5537   5532       ^ *(leur) +({w_2})  @@*,$
  5538   5533       <<- morphex(\2, ":[NAQ].*:p", ":[siGW]") -1>> leurs                                             # Accord de nombre erroné avec « \1 ».
  5539   5534       <<- __also__ -2>> =suggSing(@)                                                                  # Accord de nombre erroné : « \2 » devrait être au singulier.
  5540   5535   
................................................................................
  5557   5552   
  5558   5553   TEST: {{Quelque}} amis
  5559   5554   
  5560   5555   
  5561   5556   ## Pluriels épicènes
  5562   5557   
  5563   5558   __<i]/gn(gn_les_accord1)__
  5564         -    , les +({w_2})  @@$
  5565         -    <<- ( morph(\1, ":[NAQ].*:s") and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False)) )
  5566         -    or \1 in aREGULARPLURAL
  5567         -    -1>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \1 » devrait être au pluriel.
         5559  +    , (les) +({w_2})  @@w,$
         5560  +    <<- ( morph(\2, ":[NAQ].*:s") and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False)) )
         5561  +    or \2 in aREGULARPLURAL
         5562  +    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \2 » devrait être au pluriel.
  5568   5563   __[i]/gn(gn_les_accord2)__
  5569         -    ({w_1}) +les +({w_2})  @@0,$
  5570         -    <<- ( morph(\2, ":[NAQ].*:s")
  5571         -    or (morphex(\2, ":[NAQ].*:s", ":[pi]|>avoir") and morphex(\1, ":[RC]", ">(?:e[tn]|ou) ") and not (morph(\1, ":Rv", False) and morph(\2, ":Y", False))) )
         5564  +    ({w_1}) +(les) +({w_2})  @@0,w,$
         5565  +    <<- morph(\2, ":D", False) >>>
         5566  +    <<- ( morph(\3, ":[NAQ].*:s")
         5567  +    or (morphex(\3, ":[NAQ].*:s", ":[pi]|>avoir") and morphex(\1, ":[RC]", ">(?:e[tn]|ou) ") and not (morph(\1, ":Rv", False) and morph(\3, ":Y", False))) )
  5572   5568       and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False))
  5573         -    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \2 » devrait être au pluriel.
         5569  +    -3>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \3 » devrait être au pluriel.
  5574   5570   __[i]/gn(gn_les_accord3)__
  5575         -    ^ *les +({w_2})  @@$
  5576         -    <<- (morphex(\1, ":[NAQ].*:s", ":[ipYPGW]")
         5571  +    ^ *(les) +({w_2})  @@w,$
         5572  +    <<- (morphex(\2, ":[NAQ].*:s", ":[ipYPGW]")
  5577   5573       and not (after("^ +(?:et|ou) ") and morph(word(2), ":[NAQ]", True, False)))
  5578         -    or \1 in aREGULARPLURAL
  5579         -    -1>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \1 » devrait être au pluriel.
         5574  +    or \2 in aREGULARPLURAL
         5575  +    -2>> =suggPlur(@)                                                                               # Accord de nombre erroné : « \2 » devrait être au pluriel.
  5580   5576   
  5581   5577   TEST: ils viennent, les {{petit}}
  5582   5578   TEST: Les {{tiret}}                                           ->> tirets
  5583   5579   TEST: Les plus {{grand}} hommes.                              ->> grands
  5584   5580   TEST: les {{véhicule}}                                        ->> véhicules
  5585   5581   TEST: Les {{démoralisation}}.                                 ->> démoralisations
  5586   5582   TEST: dans les {{usine}}                                      ->> usines
................................................................................
  6034   6030   TEST: une géologue {{intelligents}}
  6035   6031   TEST: Et une femme {{déterminées}}
  6036   6032   TEST: on parle là d’une femme {{inconnu}}
  6037   6033   TEST: L’or allume le feu d’une cupidité d’une couleur et d’une sorte différentes.
  6038   6034   
  6039   6035   
  6040   6036   ## articles divers
         6037  +
         6038  +__[i]/gn(gn_2m_le)__
         6039  +    (?<!et |ou )(le) +({w_2}) +({w_2})  @@0,w,$
         6040  +    <<- morph(\1, ":D", False) >>>
         6041  +    <<- not \3.startswith("seul")
         6042  +    and morphex(\2, ":[NAQ].*:[me]", ":(?:B|G|V0|f)") and morph(\3, ":[NAQ].*:f")
         6043  +    and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
         6044  +    -3>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
         6045  +    <<- not \3.startswith("seul") 
         6046  +    and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
         6047  +    and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
         6048  +    -3>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.
         6049  +__[i]/gn(gn_2m_le_après_et_ou_de)__
         6050  +    (?:et|ou) +(le) +({w_2}) +({w_2})  @@w,w,$
         6051  +    <<- morph(\1, ":D", False) >>>
         6052  +    <<- not \3.startswith("seul")
         6053  +    and morphex(\2, ":[NAQ].*:[me]", ":(?:B|G|V0|f)") and morph(\3, ":[NAQ].*:f")
         6054  +    and not apposition(\2, \3) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
         6055  +    -3>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
         6056  +    <<- not \3.startswith("seul")
         6057  +    and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
         6058  +    and not apposition(\2, \3) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
         6059  +    -3>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.    
         6060  +
         6061  +TEST: le test très {{cons}} qu’on a passé hier.
         6062  +TEST: c’était le chien {{perdue}} des voisins.
         6063  +TEST: viens vite ou le pari {{imperdables}} sera moins facile…
         6064  +
  6041   6065   
  6042   6066   __[i]/gn(gn_2m_det_mas_sing)__
  6043         -    (?<!et |ou |de )(?:le|cet?|quel|au|ledit) +({w_2}) +({w_2})  @@w,$
         6067  +    (?<!et |ou |de )(?:cet?|quel|au|ledit) +({w_2}) +({w_2})  @@w,$
  6044   6068       <<- not \2.startswith("seul")
  6045   6069       and morphex(\1, ":[NAQ].*:[me]", ":(?:B|G|V0|f)") and morph(\2, ":[NAQ].*:f")
  6046   6070       and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
  6047   6071       -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
  6048   6072       <<- not \2.startswith("seul") 
  6049   6073       and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
  6050   6074       and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
  6051   6075       -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
  6052   6076   __[i]/gn(gn_2m_det_mas_sing_après_et_ou_de)__
  6053         -    (?:et|ou|de) +(?:le|cet?|quel|au|ledit) +({w_2}) +({w_2})  @@w,$
         6077  +    (?:et|ou|de) +(?:cet?|quel|au|ledit) +({w_2}) +({w_2})  @@w,$
  6054   6078       <<- not \2.startswith("seul")
  6055   6079       and morphex(\1, ":[NAQ].*:[me]", ":(?:B|G|V0|f)") and morph(\2, ":[NAQ].*:f")
  6056   6080       and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
  6057   6081       -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
  6058   6082       <<- not \2.startswith("seul")
  6059   6083       and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
  6060   6084       and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
................................................................................
  6085   6109       and not apposition(\1, \2)
  6086   6110       and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
  6087   6111       -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.    
  6088   6112   
  6089   6113   TEST: il brandissait avec fougue son drapeau {{déchirés}}
  6090   6114   TEST: comment osez-vous médire de mon héritage {{glorieuse}}
  6091   6115   
         6116  +
         6117  +__[i]/gn(gn_2m_la)__
         6118  +    (?<!et |ou |de )(la) +({w_2}) +({w_2})  @@0,w,$
         6119  +    <<- morph(\1, ":D", False) >>>
         6120  +    <<- \2 != "fois" and not \3.startswith("seul")
         6121  +    and morphex(\2, ":[NAQ].*:[fe]", ":(?:B|G|V0|m)") and morph(\3, ":[NAQ].*:m")
         6122  +    and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
         6123  +    -3>> =suggFemSing(@, True)                                                                      # Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
         6124  +    <<- not \3.startswith("seul") 
         6125  +    and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
         6126  +    and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
         6127  +    -3>> =suggFemSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.
         6128  +__[i]/gn(gn_2m_la_après_et_ou_de)__
         6129  +    (?:et|ou|de) +(la) +({w_2}) +({w_2})  @@w,w,$
         6130  +    <<- morph(\1, ":D", False) >>>
         6131  +    <<- \2 != "fois" and not \3.startswith("seul")
         6132  +    and morphex(\2, ":[NAQ].*:[fe]", ":(?:B|G|V0|m)") and morph(\3, ":[NAQ].*:m")
         6133  +    and not apposition(\2, \3) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
         6134  +    -3>> =suggFemSing(@, True)                                                                      # Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
         6135  +    <<- not \3.startswith("seul")
         6136  +    and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
         6137  +    and not apposition(\2, \3) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
         6138  +    -3>> =suggFemSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.
         6139  +
         6140  +TEST: La plus grande {{cinglé}}.
         6141  +TEST: il imaginait de la pluie {{noir}} tombant sur une terre dévastée.
         6142  +
  6092   6143   
  6093   6144   __[i]/gn(gn_2m_det_fem_sing)__
  6094         -    (?<!et |ou |de )(?:la|[mts]a|cette|quelle|ladite) +({w_2}) +({w_2})  @@w,$
         6145  +    (?<!et |ou |de )(?:[mts]a|cette|quelle|ladite) +({w_2}) +({w_2})  @@w,$
  6095   6146       <<- \1 != "fois" and not \2.startswith("seul")
  6096   6147       and morphex(\1, ":[NAQ].*:[fe]", ":(?:B|G|V0|m)") and morph(\2, ":[NAQ].*:m")
  6097   6148       and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
  6098   6149       -2>> =suggFemSing(@, True)                                                                      # Accord de genre erroné : « \1 » est féminin, « \2 » est masculin.
  6099   6150       <<- not \2.startswith("seul") 
  6100   6151       and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
  6101   6152       and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
  6102   6153       -2>> =suggFemSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
  6103   6154   __[i]/gn(gn_2m_det_fem_sing_après_et_ou_de)__
  6104         -    (?:et|ou|de) +(?:la|[mts]a|cette|quelle|ladite) +({w_2}) +({w_2})  @@w,$
         6155  +    (?:et|ou|de) +(?:[mts]a|cette|quelle|ladite) +({w_2}) +({w_2})  @@w,$
  6105   6156       <<- \1 != "fois" and not \2.startswith("seul")
  6106   6157       and morphex(\1, ":[NAQ].*:[fe]", ":(?:B|G|V0|m)") and morph(\2, ":[NAQ].*:m")
  6107   6158       and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
  6108   6159       -2>> =suggFemSing(@, True)                                                                      # Accord de genre erroné : « \1 » est féminin, « \2 » est masculin.
  6109   6160       <<- not \2.startswith("seul")
  6110   6161       and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
  6111   6162       and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
  6112         -    -2>> =suggFemSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.    
         6163  +    -2>> =suggFemSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
  6113   6164   
  6114         -TEST: La plus grande {{cinglé}}.
  6115   6165   TEST: quelle belle {{étourdi}}, cette gamine
         6166  +TEST: j’en ai assez de cette ville {{stressées}} en permanence.
  6116   6167   TEST: Peut-on imaginer de plus {{beaux}} {{enfant}} ?
  6117         -TEST: il imaginait de la pluie {{noir}} tombant sur une terre dévastée.
         6168  +
         6169  +
         6170  +__[i]/gn(gn_2m_leur)__
         6171  +    (?<!et |ou |de )(leur) +({w_2}) +({w_2})  @@0,w,$
         6172  +    <<- morph(\1, ":D", False) >>>
         6173  +    <<- \2 != "fois" and not \3.startswith("seul")
         6174  +    and ((morphex(\2, ":[NAQ].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NAQ].*:f")) or (morphex(\2, ":[NAQ].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NAQ].*:m")))
         6175  +    and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
         6176  +    -3>> =switchGender(@, False)                                                                    # Accord de genre erroné entre « \2 » et « \3 ».
         6177  +    <<- __also__ and hasFemForm(\2) -1>> =switchGender(@, False)                                    # Accord de genre erroné avec « \3 ».
         6178  +    <<- not \3.startswith("seul")
         6179  +    and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
         6180  +    and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
         6181  +    -3>> =suggSing(@)                                                                               # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.
         6182  +__[i]/gn(gn_2m_leur_après_et_ou_de)__
         6183  +    (?:et|ou|de) +(leur) +({w_2}) +({w_2})  @@w,w,$
         6184  +    <<- morph(\1, ":D", False) >>>
         6185  +    <<- \2 != "fois" and not \3.startswith("seul")
         6186  +    and ((morphex(\2, ":[NAQ].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NAQ].*:f")) or (morphex(\2, ":[NAQ].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NAQ].*:m")))
         6187  +    and not apposition(\2, \3)
         6188  +    and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
         6189  +    -3>> =switchGender(@, False)                                                                    # Accord de genre erroné entre « \2 » et « \3 ».
         6190  +    <<- __also__ and hasFemForm(\2) -1>> =switchGender(@, False)                                    # Accord de genre erroné avec « \3 ».
         6191  +    <<- not \3.startswith("seul")
         6192  +    and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
         6193  +    and not apposition(\2, \3) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
         6194  +    -3>> =suggSing(@)                                                                               # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.
         6195  +
         6196  +TEST: leur puissance {{perdues}}
         6197  +TEST: leur arbre {{élaguée}}
         6198  +TEST: je me souviens de leur verve {{décalé}}
         6199  +TEST: ils arrivent et leur arrogance {{insupportables}} nous fatigue tous.
  6118   6200   
  6119   6201   
  6120   6202   __[i]/gn(gn_2m_det_epi_sing)__
  6121         -    (?<!et |ou |de )(?:leur|chaque|quelque|[nv]otre) +({w_2}) +({w_2})  @@w,$
         6203  +    (?<!et |ou |de )(?:chaque|quelque|[nv]otre) +({w_2}) +({w_2})  @@w,$
  6122   6204       <<- \1 != "fois" and not \2.startswith("seul") and not re.search("(?i)^quelque chose", \0)
  6123   6205       and ((morphex(\1, ":[NAQ].*:m", ":(?:B|e|G|V0|f)") and morph(\2, ":[NAQ].*:f")) or (morphex(\1, ":[NAQ].*:f", ":(?:B|e|G|V0|m)") and morph(\2, ":[NAQ].*:m")))
  6124   6206       and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
  6125   6207       -2>> =switchGender(@, False)                                                                    # Accord de genre erroné entre « \1 » et « \2 ».
  6126   6208       <<- __also__ and hasFemForm(\1) -1>> =switchGender(@, False)                                    # Accord de genre erroné avec « \2 ».
  6127   6209       <<- not \2.startswith("seul")
  6128   6210       and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
  6129   6211       and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
  6130   6212       -2>> =suggSing(@)                                                                               # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
  6131   6213   __[i]/gn(gn_2m_det_epi_sing_après_et_ou_de)__
  6132         -    (?:et|ou|de) +(?:leur|chaque|quelque|[nv]otre) +({w_2}) +({w_2})  @@w,$
         6214  +    (?:et|ou|de) +(?:chaque|quelque|[nv]otre) +({w_2}) +({w_2})  @@w,$
  6133   6215       <<- \1 != "fois" and not \2.startswith("seul") and not re.search("(?i)quelque chose", \0)
  6134   6216       and ((morphex(\1, ":[NAQ].*:m", ":(?:B|e|G|V0|f)") and morph(\2, ":[NAQ].*:f")) or (morphex(\1, ":[NAQ].*:f", ":(?:B|e|G|V0|m)") and morph(\2, ":[NAQ].*:m")))
  6135   6217       and not apposition(\1, \2)
  6136   6218       and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
  6137   6219       -2>> =switchGender(@, False)                                                                    # Accord de genre erroné entre « \1 » et « \2 ».
  6138   6220       <<- __also__ and hasFemForm(\1) -1>> =switchGender(@, False)                                    # Accord de genre erroné avec « \2 ».
  6139   6221       <<- not \2.startswith("seul")
  6140   6222       and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
  6141   6223       and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
  6142   6224       -2>> =suggSing(@)                                                                               # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
  6143   6225   
  6144   6226   TEST: chaque élément {{terrestres}}
  6145         -TEST: je me souviens de leur verve {{décalé}}
         6227  +TEST: ils viennent de chaque coin {{ignorée}} du pays.
  6146   6228   
  6147   6229   
  6148   6230   __[i]/gn(gn_2m_det_mas_plur)__
  6149   6231       (?<!et |ou |de )(?:certains|quels|lesdits) +({w_2}) +({w_2})  @@w,$
  6150   6232       <<- not \2.startswith("seul")
  6151   6233       and morphex(\1, ":[NAQ].*:[me]", ":(?:B|G|V0|f)") and morph(\2, ":[NAQ].*:f")
  6152   6234       and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
................................................................................
  6198   6280       and not apposition(\1, \2) and not (after_chk1(r"^ +et +(\w[\w-]+)", ":A") or after_chk1(r"^ *, +(\w[\w-]+)", ":A.*:[si]"))
  6199   6281       and not ( before(r"(?i)\bune? de ") or (\0.startswith("de") and before(r"(?i)\bune? +$")) )
  6200   6282       -2>> =suggFemPlur(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
  6201   6283   
  6202   6284   TEST: certaines idioties {{stupide}}
  6203   6285   TEST: je ne sais guère de quelles âneries {{proférés}} on parle.
  6204   6286   
         6287  +__[i]/gn(gn_2m_les)__
         6288  +    (?<!et |ou )(les) +({w_2}) +({w_2})  @@0,w,$
         6289  +    <<- morph(\1, ":D", False) >>>
         6290  +    <<- \2 != "fois" and not \3.startswith("seul")
         6291  +    and ((morphex(\2, ":[NAQ].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NAQ].*:f")) or (morphex(\2, ":[NAQ].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NAQ].*:m")))
         6292  +    and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
         6293  +    -3>> =switchGender(@, True)                                                                     # Accord de genre erroné entre « \2 » et « \3 ».
         6294  +    <<- __also__ and hasFemForm(\2) -1>> =switchGender(@, True)                                     # Accord de genre erroné avec « \3 ».
         6295  +    <<- \2 != "fois" and not \3.startswith("seul")
         6296  +    and morph(\2, ":[NAQ].*:[pi]", False) and morph(\3, ":[NAQ].*:s")
         6297  +    and not apposition(\2, \3) and not (after_chk1(r"^ +et +(\w[\w-]+)", ":A") or after_chk1(r"^ *, +(\w[\w-]+)", ":A.*:[si]"))
         6298  +    and not before(r"(?i)\bune? de ")
         6299  +    -3>> =suggPlur(@)                                                                               # Accord de nombre erroné avec « \2 » : « \3 » devrait être au pluriel.
         6300  +__[i]/gn(gn_2m_les_après_et_ou_de)__
         6301  +    (?:et|ou) +(les) +({w_2}) +({w_2})  @@w,w,$
         6302  +    <<- morph(\1, ":D", False) >>>
         6303  +    <<- \2 != "fois" and not \3.startswith("seul")
         6304  +    and ((morphex(\2, ":[NAQ].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NAQ].*:f")) or (morphex(\2, ":[NAQ].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NAQ].*:m")))
         6305  +    and not apposition(\2, \3)
         6306  +    and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
         6307  +    -3>> =switchGender(@, True)                                                                     # Accord de genre erroné entre « \2 » et « \3 ».
         6308  +    <<- __also__ and hasFemForm(\2) -1>> =switchGender(@, True)                                     # Accord de genre erroné avec « \3 ».
         6309  +    <<- \2 != "fois" and not \3.startswith("seul")
         6310  +    and morph(\2, ":[NAQ].*:[pi]", False) and morph(\3, ":[NAQ].*:s")
         6311  +    and not apposition(\2, \3) and not (after_chk1(r"^ +et +(\w[\w-]+)", ":A") or after_chk1(r"^ *, +(\w[\w-]+)", ":A.*:[si]"))
         6312  +    and not ( before(r"(?i)\bune? de ") or (\0.startswith("de") and before(r"(?i)\bune? +$")) )
         6313  +    -3>> =suggPlur(@)                                                                               # Accord de nombre erroné avec « \2 » : « \3 » devrait être au pluriel.
         6314  +
         6315  +TEST: les pitres {{imbécile}}
         6316  +TEST: il faut en convenir et les femmes {{oubliés}}
         6317  +
  6205   6318   
  6206   6319   __[i]/gn(gn_2m_det_epi_plur)__
  6207         -    (?<!et |ou |de )(?:[lcmts]es|[nv]os|leurs|quelques|plusieurs|aux|moult) +({w_2}) +({w_2})  @@w,$
         6320  +    (?<!et |ou |de )(?:[cmts]es|[nv]os|leurs|quelques|plusieurs|aux|moult) +({w_2}) +({w_2})  @@w,$
  6208   6321       <<- \1 != "fois" and not \2.startswith("seul")
  6209   6322       and ((morphex(\1, ":[NAQ].*:m", ":(?:B|e|G|V0|f)") and morph(\2, ":[NAQ].*:f")) or (morphex(\1, ":[NAQ].*:f", ":(?:B|e|G|V0|m)") and morph(\2, ":[NAQ].*:m")))
  6210   6323       and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
  6211   6324       -2>> =switchGender(@, True)                                                                     # Accord de genre erroné entre « \1 » et « \2 ».
  6212   6325       <<- __also__ and hasFemForm(\1) -1>> =switchGender(@, True)                                     # Accord de genre erroné avec « \2 ».
  6213   6326       <<- \1 != "fois" and not \2.startswith("seul")
  6214   6327       and morph(\1, ":[NAQ].*:[pi]", False) and morph(\2, ":[NAQ].*:s")
  6215   6328       and not apposition(\1, \2) and not (after_chk1(r"^ +et +(\w[\w-]+)", ":A") or after_chk1(r"^ *, +(\w[\w-]+)", ":A.*:[si]"))
  6216   6329       and not before(r"(?i)\bune? de ")
  6217   6330       -2>> =suggPlur(@)                                                                               # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
  6218   6331   __[i]/gn(gn_2m_det_epi_plur_après_et_ou_de)__
  6219         -    (?:et|ou|de) +(?:[lcmts]es|[nv]os|leurs|quelques|plusieurs|aux|moult) +({w_2}) +({w_2})  @@w,$
         6332  +    (?:et|ou|de) +(?:[cmts]es|[nv]os|leurs|quelques|plusieurs|aux|moult) +({w_2}) +({w_2})  @@w,$
  6220   6333       <<- \1 != "fois" and not \2.startswith("seul")
  6221   6334       and ((morphex(\1, ":[NAQ].*:m", ":(?:B|e|G|V0|f)") and morph(\2, ":[NAQ].*:f")) or (morphex(\1, ":[NAQ].*:f", ":(?:B|e|G|V0|m)") and morph(\2, ":[NAQ].*:m")))
  6222   6335       and not apposition(\1, \2)
  6223   6336       and not morph(word(-1), ":[NAQ]|>(?:et|ou) ", False, False)
  6224   6337       -2>> =switchGender(@, True)                                                                     # Accord de genre erroné entre « \1 » et « \2 ».
  6225   6338       <<- __also__ and hasFemForm(\1) -1>> =switchGender(@, True)                                     # Accord de genre erroné avec « \2 ».
  6226   6339       <<- \1 != "fois" and not \2.startswith("seul")
................................................................................
  6278   6391       or (morph(\1, ":[NAQ].*:s") and morph(\2, ":[NAQ].*:[si]") and morph(\3, ":[NAQ].*:p"))
  6279   6392       -3>> =switchPlural(@)                                                   # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
  6280   6393   
  6281   6394   TEST: Grande manifestation {{réprimées}} dans le sang.
  6282   6395   
  6283   6396   
  6284   6397   __[i]/gn(gn_3m_les)__
  6285         -    les +({w_2}) +({w_2}) +({w_3})  @@w,w,$
  6286         -    <<- morph(\1, ":[NAQ].*:[pi]") and morph(\2, ":[NAQ].*:[pi]") and morph(\3, ":[NAQ].*:s")
  6287         -    -3>> =suggPlur(@)                                                       # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
         6398  +    (les) +({w_2}) +({w_2}) +({w_3})  @@0,w,w,$
         6399  +    <<- morph(\1, ":D", False)
         6400  +    and morph(\2, ":[NAQ].*:[pi]") and morph(\3, ":[NAQ].*:[pi]") and morph(\4, ":[NAQ].*:s")
         6401  +    -4>> =suggPlur(@)                                                       # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.
  6288   6402   
  6289   6403   TEST: les heureux imbéciles {{payé}} au lance-pierre.
  6290   6404   
         6405  +
         6406  +__[i]/gn(gn_3m_le_la)__
         6407  +    ^ *(l(?:e(?:ur|)|a)) +({w_2}) +({w_2}) +({w_3})  @@*,w,w,$
         6408  +    <<- morph(\1, ":D", False)
         6409  +    and morph(\2, ":[NAQ].*:[si]", False) and morphex(\3, ":[NAQ].*:[si]", ":G") and morph(\4, ":[NAQ].*:p")
         6410  +    -4>> =suggSing(@)                                                       # Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au singulier.
         6411  +
         6412  +TEST: leur grande passion {{délirantes}} pour le cosplay.
         6413  +
  6291   6414   
  6292   6415   __[i]/gn(gn_3m_det_sing)__
  6293         -    ^ *(l(?:e(?:ur|dit|)|a(?:dite|))|une?|ce(?:t|tte|)|[mts](?:on|a)|[nv]otre|au|quel(?:le|)) +({w_2}) +({w_2}) +({w_3})  @@*,w,w,$
         6416  +    ^ *(l(?:edit|adite)|une?|ce(?:t|tte|)|[mts](?:on|a)|[nv]otre|au|quel(?:le|)) +({w_2}) +({w_2}) +({w_3})  @@*,w,w,$
  6294   6417       <<- morph(\2, ":[NAQ].*:[si]", False) and morphex(\3, ":[NAQ].*:[si]", ":G") and morph(\4, ":[NAQ].*:p")
  6295   6418       -4>> =suggSing(@)                                                       # Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au singulier.
  6296   6419   
  6297   6420   TEST: un gros connard {{pathétiques}}
  6298   6421   TEST: le jour venu prises par surprise elles durent s’enfuir.
  6299   6422   
  6300   6423   
................................................................................
  9917  10040   !!!
  9918  10041   !!!
  9919  10042   !!! Processeur avant impératif                                                                      
  9920  10043   !!!
  9921  10044   !!!
  9922  10045   
  9923  10046   __<i>(p_n_importe_qui_quoi)__       n(’)importe quo?i @@1 <<- ~1>> `
  9924         -__<i](p_premier_ne_pro_per_obj1)__  ^ *ne l(?:es?|a) l(?:ui|eur) <<- ~>> >
  9925         -__<i](p_premier_ne_pro_per_obj2)__  ^ *ne (?:[mt]’|l(?:ui|eur) )en <<- ~>> >
  9926         -__<i](p_premier_ne_pro_per_obj3)__  ^ *ne (?:[mt]e|[nv]ous) (?:les?|la|en) <<- ~>> >
  9927         -__<i](p_premier_ne_pro_per_obj4)__  ^ *ne +(?:en|l(?:es?|a|’(?:en|y))|[mt](?:e|’(?:en|y))|[nv]ous) <<- ~>> >
  9928         -__<i>(p_premier_ne_pro_per_obj5)__  ^ *n’(?:en |y |) <<- ~>> >
  9929         -__<i>(p_premier_ne_pro_per_obj6)__  ^ *ne (?:l’|) <<- ~>> >
        10047  +
        10048  +
        10049  +__<i](p_premier_ne_pro_per_obj1)__
        10050  +    ^( *ne l(?:es?|a) l(?:ui|eur)) ({w_2})  @@0,$
        10051  +    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
        10052  +    <<- ~1>> *
        10053  +__<i](p_premier_ne_pro_per_obj2)__
        10054  +    ^( *ne (?:[mt]’|l(?:ui|eur) )en) ({w_2})  @@0,$
        10055  +    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
        10056  +    <<- ~1>> *
        10057  +__<i](p_premier_ne_pro_per_obj3)__
        10058  +    ^( *ne (?:[mt]e|[nv]ous) (?:les?|la|en)) ({w_2})  @@0,$
        10059  +    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
        10060  +    <<- ~1>> *
        10061  +__<i](p_premier_ne_pro_per_obj4)__
        10062  +    ^( *ne +(?:en|l(?:es?|a|’(?:en|y))|[mt](?:e|’(?:en|y))|[nv]ous)) ({w_2})  @@0,$
        10063  +    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
        10064  +    <<- ~1>> *
        10065  +__<i>(p_premier_ne_pro_per_obj5)__
        10066  +    ^( *n’(?:en |y |))({w_2})  @@0,$
        10067  +    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
        10068  +    <<- ~1>> *
        10069  +__<i>(p_premier_ne_pro_per_obj6)__
        10070  +    ^( *ne (?:l’|))({w_2})  @@0,$
        10071  +    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
        10072  +    <<- ~1>> *
  9930  10073   
  9931  10074   
  9932  10075   
  9933  10076   !!
  9934  10077   !!
  9935  10078   !!!! Impératif !                                                                                    
  9936  10079   !!
................................................................................
  9949  10092   
  9950  10093   
  9951  10094   # verbes du 1er et du 3ᵉ groupe en -e
  9952  10095   __[i]/imp(imp_vgroupe1)__
  9953  10096       ^ *(\w+es)(?![- ](?:je|tu|[nv]ous|ils?|elles?|t-ils?|t-elles?))  @@$
  9954  10097       <<- morphex(\1, ":V[13].*:Ip.*:2s", ":[GNAM]")
  9955  10098       -1>> =\1[:-1]                                                                   # S’il s’agit d’un impératif, pas de “s”.
  9956         -__[i]/imp(imp_ne_vgroupe1)__
  9957         -    ^ *> +(\w+es)(?![- ](?:je|tu|[nv]ous|ils?|elles?|t-ils?|t-elles?))  @@$
  9958         -    <<- morphex(\1, ":V[13].*:Ip.*:2s", ":G")
  9959         -    -1>> =\1[:-1]                                                                   # S’il s’agit d’un impératif, pas de “s”.
  9960  10099   
  9961  10100   TEST: {{Apportes}} ton fric à cet homme.
  9962  10101   TEST: N’{{abandonnes}} pas si vite.
        10102  +TEST: Ne {{demandes}} rien, tais-toi.
  9963  10103   TEST: Castres est une belle ville.
  9964  10104   TEST: Limoges aussi.
  9965  10105   
  9966  10106   
  9967  10107   __<i>/imp(imp_allez1)__
  9968  10108       ^ *(allés?), @@* <<- -1>> allez                                         # S’il s’agit d’un impératif, écrivez :
  9969  10109   __<i>/imp(imp_allez2)__
................................................................................
  9976  10116   # verbes du 2ᵉ et du 3ᵉ groupe en -t
  9977  10117   __[i]/imp(imp_vgroupe2_vgroupe3_t)__
  9978  10118       ^ *(\w+t)(?![- ](?:je|tu|[nv]ous|ils?|elles?|on|t-ils?|t-elles?))  @@$
  9979  10119       <<- morphex(\1, ":V[23].*:Ip.*:3s", ":[GNA]|>(?:devoir|suffire)") and analyse(\1[:-1]+"s", ":E:2s", False)
  9980  10120       and not (re.search("(?i)^vient$", \1) and after("^ +(?:l[ea]|se |s’)"))
  9981  10121       and not (re.search("(?i)^dit$", \1) and after("^ +[A-ZÉÈÂÎ]"))
  9982  10122       -1>> =\1[:-1]+"s"                                                               # S’il s’agit d’un impératif, la terminaison est “is”, non “it”.
  9983         -__[i]/imp(imp_ne_vgroupe2_vgroupe3_t)__
  9984         -    ^ *> +(\w+t)(?![- ](?:je|tu|[nv]ous|ils?|elles?|on|t-ils?|t-elles?))  @@$
  9985         -    <<- morphex(\1, ":V[23].*:Ip.*:3s", ":G|>(?:devoir|suffire)") and analyse(\1[:-1]+"s", ":E:2s", False)
  9986         -    -1>> =\1[:-1]+"s"                                                               # S’il s’agit d’un impératif, la terminaison est “is”, non “it”.
  9987  10123   
  9988  10124   TEST: {{Finit}} ton assiette.
  9989  10125   TEST: Ne {{pourrit}} pas l’ambiance.
  9990  10126   TEST: Suffit de s’en servir.
  9991  10127   TEST: Et ne doit pas être rejeté dans les limbes.
  9992  10128   TEST: Vient s’ajouter à ce contexte la perception, partagée par beaucoup, du caractère fortement menaçant de l’environnement économique et géopolitique.
  9993  10129   
................................................................................
  9994  10130   
  9995  10131   # verbes du 3ᵉ groupe en -d
  9996  10132   __[i]/imp(imp_vgroupe3_d)__
  9997  10133       ^ *(\w+d)(?![- ](?:je|tu|[nv]ous|ils?|elles?|on|t-ils?|t-elles?))  @@$
  9998  10134       <<- morphex(\1, ":V3.*:Ip.*:3s", ":[GNA]")
  9999  10135       and not (re.search("(?i)^répond$", \1) and after("^ +[A-ZÉÈÂÎ]"))
 10000  10136       -1>> \1s                                                                        # S’il s’agit d’un impératif, ajoutez un “s”.
 10001         -__[i]/imp(imp_ne_vgroupe3_d)__
 10002         -    ^ *> +(\w+d)(?![- ](?:je|tu|[nv]ous|ils?|elles?|on|t-ils?|t-elles?))  @@$
 10003         -    <<- morphex(\1, ":V3.*:Ip.*:3s", ":G")
 10004         -    -1>> \1s                                                                        # S’il s’agit d’un impératif, ajoutez un “s”.
 10005  10137   
 10006  10138   TEST: {{Prend}} le chemin de droite.
 10007  10139   TEST: N’{{attend}} pas qu’elle vienne.
 10008  10140   TEST: — Pour ma part, répond P., je crois que tout va bien.
 10009  10141   
 10010  10142   
 10011  10143   # aller
 10012  10144   __[i]/imp(imp_va)__
 10013         -    ^[ >]*(vas)(?! (?:tu|ils?|elles?|t-ils?|t-elles?))  @@$
        10145  +    ^ *(vas)(?! (?:tu|ils?|elles?|t-ils?|t-elles?))  @@$
 10014  10146       <<- -1>> va                                                                     # S’il s’agit d’un impératif, pas de “s”.
 10015  10147   
 10016  10148   TEST: {{Vas}} lui mettre une branlée.
 10017  10149   
 10018  10150   
 10019  10151   # être
 10020  10152   __[i]/imp(imp_sois)__
 10021  10153       ^ *(soit) +({w_2})  @@*,$
 10022         -    <<- morphex(\2, ":A", ":G") and not after(r"\bsoit\b")
        10154  +    <<- morph(\1, ":V") or (morphex(\2, ":A", ":G") and not after(r"\bsoit\b"))
 10023  10155       -1>> sois                                                                       # S’il s’agit d’un impératif, écrivez « sois ».
 10024         -__[i]/imp(imp_ne_sois)__
 10025         -    ^ *> +(soit)  @@$
 10026         -    <<- -1>> sois                                                                   # S’il s’agit d’un impératif, écrivez « sois ».
 10027  10156   
 10028  10157   TEST: {{Soit}} cohérent avec toi-même.
 10029  10158   TEST: Ne {{soit}} pas con.
 10030  10159   
 10031  10160   
 10032  10161   # avoir
 10033  10162   __[i]/imp(imp_aie)__
................................................................................
 10189  10318   TEST: {{vas y}}, ce n’est pas dangereux
 10190  10319   TEST: {{convenez en}}, c’est une belle affaire malgré son prix élevé
 10191  10320   
 10192  10321   
 10193  10322   
 10194  10323   !!!
 10195  10324   !!!
 10196         -!!! Processeur: destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.
        10325  +!!! Processeur: destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.    
 10197  10326   !!!
 10198  10327   !!!
 10199  10328   
 10200  10329   # Brainfuck (ici, prudence !)
 10201         -__[i](p_pro_per_obj01)__    ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y) <<- ~>> >
 10202         -__[i](p_pro_per_obj02)__    ne +(?:[mts](?:e|’(?:en|y))|[nv]ous|l(?:es?|a|ui|eur|’(?:en|y))) <<- ~>> >
 10203         -__[i](p_pro_per_obj03)__    [mts]e +l(?:a|es?) <<- ~>> >
 10204         -__[i](p_pro_per_obj04)__    [nmsl]’(?:en|y) <<- ~>> >
 10205         -__[i](p_pro_per_obj05)__    l(?:a|es?) +(?:lui|en) <<- ~>> >
 10206         -__[i](p_pro_per_obj06)__    lui +(?:la|les?|en|y) <<- not morph(word(-1), ":R", False, True) ~>> >
 10207         -__[i](p_pro_per_obj07)__    leur +(?:en|y) <<- not morph(word(-1), ":R", False, False) ~>> >
 10208         -__[i](p_pro_per_obj08)__    (?:je|tu|ils?|on) ([nv]ous(?: la| les?|)|lui) @@$ <<- ~1>> >
 10209         -__[i](p_pro_per_obj09)__    (?:je|tu|ils?|on) (l(?:es?|a)) ({w_1}) @@w,$
 10210         -    <<- \1 == "le" and not morph(\2, ":N.*:[me]:[si]") ~1>> >
 10211         -    <<- \1 == "la" and not morph(\2, ":N.*:[fe]:[si]") ~1>> >
 10212         -    <<- \1 == "les" and not morph(\2, ":N.*:.:[pi]") ~1>> >
 10213         -__[i](p_pro_per_obj10)__    (?:elles?|[nv]ous) ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) @@$ <<- not morph(word(-1), ":R", False, False) ~1>> >
 10214         -__[i](p_pro_per_obj11)__    ce(?:ux|lles?|lui|la|) qui ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) @@$ <<- ~1>> >
 10215         -__[i](p_pro_per_obj12)__    (?<!’)(en) ({w_2}) @@0,$ <<- morph(\2, ":[123][sp]") ~1>> >
 10216         -__[i](p_pro_per_obj13)__    (?:tu|il|on) (en) @@3 <<- not morph(word(-1), ":[123]s", False, False) ~1>> >
 10217         -__[i](p_pro_per_obj14)__    (?<!’)elle (en) @@5 <<- not morph(word(-1), ":(?:[123]s|R)", False, False) ~1>> >
 10218         -__[i](p_pro_per_obj15)__    (?<!’)elles (en) @@6 <<- not morph(word(-1), ":(?:[123]p|R)", False, False) ~1>> >
 10219         -__[i](p_pro_per_obj16)__    ils (en) @@4 <<- not morph(word(-1), ":3p", False, False) ~1>> >
 10220         -__[i](p_pro_per_obj17)__    (?<!’)(y) ({w_2}) @@0,2 <<- morph(\2, ":[123][sp]", False) ~1>> >
 10221         -__[i](p_pro_per_obj18)__    (le) ({w_2}) @@0,3 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[me]:[si]|G|M)") ~1>> >
 10222         -__[i](p_pro_per_obj19)__    (la) ({w_2}) @@0,3 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[fe]:[si]|G|M)") ~1>> >
 10223         -__[i](p_pro_per_obj20)__    (l’)({w_2}) @@0,2 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >
 10224         -__[i](p_pro_per_obj21)__    (leur) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >
 10225         -__[s](p_pro_per_obj22)__    [lL]’a <<- ~>> > a
 10226         -__[i](p_pro_per_obj23)__    (nous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|1p)") ~1>> >
 10227         -__[i](p_pro_per_obj24)__    (vous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|2p)") ~1>> >
 10228         -__[i](p_pro_per_obj25)__    (?:à|de) ([nv]ous|lui|les?|en)(?! qui) @@$ <<- ~1>> >
 10229         -__[i](p_pro_per_obj26)__    (s’)({w4}) @@0,2 <<- morph(\2, ":V", False) ~1>> >
 10230         -__[i](p_pro_per_obj27)__    (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +){w_2} @@* <<- isStart() ~1>> >
 10231         -__[i](p_pro_per_obj28)__    (?:je|tu|ils?|elles?|on|[nv]ous|ce(?:ux|elles?|lui|la|) qui) (l’)({w4}) @@*,$ <<- morph(\2, ":V", False) ~1>> >
 10232         -__[i](p_pro_per_obj29)__    (t’(?:en|y)) ({w_2}) @@0,$ <<- not morph(\2, ":2s", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >
 10233         -__[i](p_pro_per_obj30)__    (t’)({w_2}) @@0,$ <<- not morph(\2, ":2s|>(ils?|elles?|on) ", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >
 10234         -__[i>(p_pro_per_obj31)__    ne [mtsl]’ <<- ~>> >
 10235         -__[i>(p_pro_per_obj32)__    [mts]e +l’ <<- ~>> >
 10236         -__[i>(p_pro_per_obj33)__    [nm]’ <<- ~>> >
 10237         -__[i](p_pro_per_obj34)__    [nmts]e <<- ~>> >
 10238         -__<s>(p_pro_per_obj35)__    > +> <<- ~>> >
        10330  +__[i](p_pro_per_obj01)__
        10331  +    (ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y)) +({w_1})  @@0,$
        10332  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10333  +    <<- ~1>> *
        10334  +__[i](p_pro_per_obj02)__
        10335  +    (ne +(?:[mts](?:e|’(?:en|y))|[nv]ous|l(?:es?|a|ui|eur|’(?:en|y)))) +({w_1})  @@0,$
        10336  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10337  +    <<- ~1>> *
        10338  +__[i](p_pro_per_obj03)__
        10339  +    ([mts]e +l(?:a|es?)) +({w_1})  @@0,$
        10340  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10341  +    <<- ~1>> *
        10342  +__[i](p_pro_per_obj04)__
        10343  +    ([nmsl]’(?:en|y)) +({w_1})  @@0,$
        10344  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10345  +    <<- ~1>> *
        10346  +__[i](p_pro_per_obj05)__
        10347  +    (l(?:a|es?) +(?:lui|en)) +({w_1})  @@0,$
        10348  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10349  +    <<- ~1>> *
        10350  +__[i](p_pro_per_obj06)__
        10351  +    (lui +(?:la|les?|en|y)) +({w_1})  @@0,$
        10352  +    <<- not morph(word(-1), ":R", False, True) ~1>> *
        10353  +    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10354  +__[i](p_pro_per_obj07)__
        10355  +    (leur +(?:en|y)) +({w_1})  @@0,$
        10356  +    <<- not morph(word(-1), ":R", False, False) ~1>> *
        10357  +    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10358  +__[i](p_pro_per_obj08)__
        10359  +    (?:je|tu|ils?|on) ([nv]ous(?: la| les?|)|lui) +({w_1})  @@*,$
        10360  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10361  +    <<- __also__ ~1>> *
        10362  +__[i](p_pro_per_obj09)__
        10363  +    (?:je|tu|ils?|on) (l(?:es?|a)) ({w_1}) @@w,$
        10364  +    <<- (\1 == "le" and not morph(\2, ":N.*:[me]:[si]"))
        10365  +        or (\1 == "la" and not morph(\2, ":N.*:[fe]:[si]"))
        10366  +        or (\1 == "les" and not morph(\2, ":N.*:.:[pi]")) ~1>> *
        10367  +    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10368  +__[i](p_pro_per_obj10)__
        10369  +    (?:elles?|[nv]ous) ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) +({w_1})  @@*,$
        10370  +    <<- not morph(word(-1), ":R", False, False) ~1>> *
        10371  +    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10372  +__[i](p_pro_per_obj11)__
        10373  +    ce(?:ux|lles?|lui|la|) qui ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) +({w_1})  @@*,$
        10374  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10375  +    <<- __also__ ~1>> *
        10376  +__[i](p_pro_per_obj12)__
        10377  +    (?<!’)(en) ({w_2}) @@0,$
        10378  +    <<- morph(\2, ":(?:[123][sp]|P|Y)") ~1>> *
        10379  +__[i](p_pro_per_obj13)__
        10380  +    (?:tu|il|on) (en) +({w_1})  @@w,$
        10381  +    <<- not morph(word(-1), ":[123]s", False, False) ~1>> *
        10382  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10383  +__[i](p_pro_per_obj14)__
        10384  +    (?<!’)elle (en) +({w_1})  @@w,$
        10385  +    <<- not morph(word(-1), ":(?:[123]s|R)", False, False) ~1>> *
        10386  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10387  +__[i](p_pro_per_obj15)__
        10388  +    (?<!’)elles (en) +({w_1})  @@w,$
        10389  +    <<- not morph(word(-1), ":(?:[123]p|R)", False, False) ~1>> *
        10390  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10391  +__[i](p_pro_per_obj16)__
        10392  +    ils (en) +({w_1})  @@4,$
        10393  +    <<- not morph(word(-1), ":3p", False, False) ~1>> *
        10394  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10395  +__[i](p_pro_per_obj17)__
        10396  +    (?<!’)(y) ({w_2}) @@0,2
        10397  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) ~1>> *
        10398  +    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
        10399  +__[i](p_pro_per_obj18)__
        10400  +    (le) ({w_2}) @@0,3
        10401  +    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[me]:[si]|G|M)") ~1>> *
        10402  +    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
        10403  +__[i](p_pro_per_obj19)__
        10404  +    (la) ({w_2}) @@0,3
        10405  +    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[fe]:[si]|G|M)") ~1>> *
        10406  +    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
        10407  +__[i](p_pro_per_obj20)__
        10408  +    (l’)({w_2}) @@0,2
        10409  +    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> *
        10410  +    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
        10411  +__[i](p_pro_per_obj21)__
        10412  +    (leur) ({w_2}) @@0,5
        10413  +    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> *
        10414  +    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
        10415  +__[s](p_pro_per_obj22)__
        10416  +    [lL]’(a) @@$
        10417  +    <<- =>> select(\1, ":V")
        10418  +    <<- ~>> "  a"
        10419  +__[i](p_pro_per_obj23)__
        10420  +    (nous) ({w_2}) @@0,5
        10421  +    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:A|G|M|1p)") =>> select(\2, ":(?:[123][sp]|P|Y)")
        10422  +    <<- __also__ ~1>> *
        10423  +__[i](p_pro_per_obj24)__
        10424  +    (vous) ({w_2}) @@0,5
        10425  +    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:A|G|M|2p)") =>> select(\2, ":(?:[123][sp]|P|Y)")
        10426  +    <<- __also__ ~1>> *
        10427  +__[i](p_pro_per_obj25)__
        10428  +    (?:à|de) ([nv]ous|lui|les?|en) (?!qui)({w_2}) @@w,$
        10429  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10430  +    <<- ~1>> *
        10431  +__[i](p_pro_per_obj26)__
        10432  +    (s’)({w4}) @@0,2
        10433  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10434  +    <<- __also__ ~1>> *
        10435  +__[i](p_pro_per_obj27)__
        10436  +    (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +)({w_2}) @@*,$
        10437  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10438  +    <<- isStart() ~1>> *
        10439  +__[i](p_pro_per_obj28)__
        10440  +    (?:je|tu|ils?|elles?|on|[nv]ous|ce(?:ux|elles?|lui|la|) qui) (l’)({w4}) @@*,$
        10441  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10442  +    <<- __also__ ~1>> *
        10443  +__[i](p_pro_per_obj29)__
        10444  +    (t’(?:en|y)) ({w_2}) @@0,$
        10445  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10446  +    <<- not morph(\2, ":2s", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> *
        10447  +__[i](p_pro_per_obj30)__
        10448  +    (t’)({w_2}) @@0,$
        10449  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10450  +    <<- not morph(\2, ":2s|>(ils?|elles?|on) ", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> *
        10451  +__[i>(p_pro_per_obj31)__
        10452  +    (ne [mtsl]’)({w_1})  @@0,$
        10453  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10454  +    <<- ~1>> *
        10455  +__[i>(p_pro_per_obj32)__
        10456  +    ([mts]e +l’)({w_1})  @@0,$
        10457  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10458  +    <<- ~1>> *
        10459  +__[i>(p_pro_per_obj33)__
        10460  +    [nm]’({w_1})  @@2
        10461  +    <<- morph(\1, ":(?:[123][sp]|P|Y)", False) =>> select(\1, ":(?:[123][sp]|P|Y)")
        10462  +    <<- ~>> "  \1"
        10463  +__[i](p_pro_per_obj34)__
        10464  +    ([nmts]e +)({w_1})  @@0,$
        10465  +    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
        10466  +    <<- __also__ ~1>> *
 10239  10467   # Fin du Brainfuck
 10240  10468   
 10241  10469   
 10242  10470   
 10243  10471   !!
 10244  10472   !!
 10245  10473   !!!! Confusions                                                                                     
................................................................................
 10263  10491   TEST: Il vient {{a}} la maison.
 10264  10492   TEST: tu ne donnes rien {{a}} ces hommes.
 10265  10493   TEST: Nous les donnons {{a}} ces gens.
 10266  10494   TEST: j’arrive {{a}} la gare
 10267  10495   
 10268  10496   
 10269  10497   #### CONFUSION fasse / face
 10270         -__<i]/conf(conf_fasse)__
 10271         -    > +(face)(?! à) @@$ <<- -1>> fasse                     # Confusion probable. Pour le subjonctif de “faire”, écrivez “fasse”.
        10498  +#__<i]/conf(conf_fasse)__
        10499  +#    > +(face)(?! à) @@$ <<- -1>> fasse                     # Confusion probable. Pour le subjonctif de “faire”, écrivez “fasse”.
 10272  10500   
 10273  10501   TEST: j’ai peur qu’il ne leur {{face}} quelque chose de mal
 10274  10502   
 10275  10503   
 10276  10504   #### CONFUSION ÊTRE / AVOIR
 10277  10505   __[i]/conf(conf_ait_confiance_été_faim_tort)__
 10278  10506       (?<!’)(est?) +(con(?:fiance|science)|envie|été|p(?:eine|eur)|faim|h(?:âte|onte)|recours|soif|tort)  @@0,$
................................................................................
 10349  10577       <<- morph(\1, ">valoir ", False) and morphex(\2, ":(?:Q|2p)", ":[GM]")
 10350  10578       -2>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.
 10351  10579   
 10352  10580   TEST: Mieux vaut {{consacré}} son temps à des occupations utiles.
 10353  10581   
 10354  10582   
 10355  10583   __[i]/infi(infi_à)__
 10356         -    à +> +({w_2}(?:ée?|ez))  @@$
 10357         -    <<- morphex(\1, ":V1", ":[NM]") and not \1.istitle() and not before("> +$")
        10584  +    à +({w_2}(?:ée?s?|ez|ai[st]?))  @@$
        10585  +    <<- morphex(\1, ":V1", ":[NM]") and not \1.istitle() and not before(r"(?i)\b(?:les|en) +$")
 10358  10586       -1>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.
 10359  10587   
 10360  10588   TEST: elle parvenait à y {{songez}} souvent
 10361  10589   TEST: je vais à Rodez.
 10362  10590   
 10363  10591   
 10364  10592   __[i]/infi(infi_avoir_beau)__
................................................................................
 10366  10594       <<- morph(\1, ">avoir ", False) and morphex(\2, ":V1", ":N")
 10367  10595       -2>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.|http://fr.wiktionary.org/wiki/avoir_beau
 10368  10596   
 10369  10597   TEST: Ils ont beau {{consacré}} le plus clair de leur temps à ce projet, ça n’avance guère.
 10370  10598   
 10371  10599   
 10372  10600   __[i]/infi(infi_par_pour_sans)__
 10373         -    (?:p(?:a|ou)r|sans) +> +({w_2}(?:ée?s?|ai[st]?|ez))  @@$
        10601  +    (?:p(?:a|ou)r|sans) +({w_2}(?:ée?s?|ai[st]?|ez))  @@$
 10374  10602       <<- morphex(\1, ":[Q123][sp]?", ":Y") -1>> =suggVerbInfi(@)                                     # Le verbe devrait être à l’infinitif.
 10375  10603   
 10376  10604   TEST: pour s’y {{donnait}} le plus souvent.
 10377  10605   
 10378  10606   
 10379  10607   
 10380  10608   #__[i]/infi__
................................................................................
 10384  10612   
 10385  10613   
 10386  10614   #### PAS D’INFINITIF
 10387  10615   
 10388  10616   __[i]/ppas(ppas_être)__
 10389  10617       (?<![cC]’)({etre}) +({w_2}er)  @@0,$
 10390  10618       <<- morph(\1, ":V0e", False) and (morphex(\2, ":Y", ":[NAQ]") or \2 in aSHOULDBEVERB) and not re.search("(?i)^(?:soit|été)$", \1)
 10391         -    and not morph(word(-1), ":Y|>ce", False, False) and not before("(?i)ce (?:>|qu|que >) $")
 10392         -    and not before_chk1(r"({w_2}) +> $", ":Y") and not before_chk1(r"^ *>? *(\w[\w-]+)", ":Y")
        10619  +    and not morph(word(-1), ":Y|>ce", False, False) and not before("(?i)ce que? +$")
        10620  +    and not morph(word(-1), ":Y", False, False) and not before_chk1(r"^ *>? *(\w[\w-]+)", ":Y")
 10393  10621       -2>> =suggVerbPpas(@)                                                   # Incohérence. Après « être », le verbe ne doit pas être à l’infinitif.
 10394  10622   
 10395  10623   TEST: ils sont {{tromper}} par tous ces hypocrites.
        10624  +TEST: Jeûner n’est pas seulement cesser de manger.
        10625  +TEST: Ne pas aimer n’est pas oublier l’autre.
 10396  10626   
 10397  10627   
 10398  10628   !!
 10399  10629   !!
 10400  10630   !!!! Conjugaison                                                                                    
 10401  10631   !!
 10402  10632   !!
................................................................................
 10406  10636       j’({w_1})  @@2
 10407  10637       <<- morphex(\1, ":V", ":1s|>(?:en|y)")
 10408  10638       -1>> =suggVerb(@, ":1s")                                 # Conjugaison erronée. Accord avec « je ». Le verbe devrait être à la 1ʳᵉ personne du singulier.
 10409  10639   __[i]/conj(conj_je)__
 10410  10640       (je) +({w_1})  @@0,$
 10411  10641       <<- morphex(\2, ":V", ":(?:1s|G)") and not (morph(\2, ":[PQ]", False) and morph(word(-1), ":V0.*:1s", False, False))
 10412  10642       -2>> =suggVerb(@, ":1s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 1ʳᵉ personne du singulier.
 10413         -__[i]/conj(conj_je_pronom)__
 10414         -    (je) +> +({w_1})  @@0,$
 10415         -    <<- morphex(\2, ":V", ":(?:1s|G|1p)")
 10416         -    -2>> =suggVerb(@, ":1s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 1ʳᵉ personne du singulier.
        10643  +#__[i]/conj(conj_je_pronom)__
        10644  +#    (je) +> +({w_1})  @@0,$
        10645  +#    <<- morphex(\2, ":V", ":(?:1s|G|1p)")
        10646  +#    -2>> =suggVerb(@, ":1s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 1ʳᵉ personne du singulier.
 10417  10647   __[i]/conj(conj_j_en_y)__
 10418         -    (j’(?:y|en)) +>? *({w_1})  @@0,$
        10648  +    (j’(?:y|en)) +({w_1})  @@0,$
 10419  10649       <<- morphex(\2, ":V", ":(?:1s|G|1p)")
 10420  10650       -2>> =suggVerb(@, ":1s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 1ʳᵉ personne du singulier.
 10421  10651   __[i]/conj(conj_moi_qui)__
 10422         -    (moi +qui) +>? *({w_1})  @@0,$
        10652  +    (moi +qui) +({w_1})  @@0,$
 10423  10653       <<- morphex(\2, ":V", ":(?:1s|G|1p|3p!)")
 10424  10654       -2>> =suggVerb(@, ":1s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 1ʳᵉ personne du singulier.
 10425  10655   
 10426  10656   TEST: je {{donnerait}} tout pour y parvenir.
 10427  10657   TEST: Je le lui {{prend}}.
 10428  10658   TEST: Je l’{{apprend}}.
 10429  10659   TEST: Je les {{contre-attaques}}.
................................................................................
 10440  10670   
 10441  10671   
 10442  10672   ## 2sg
 10443  10673   __[i]/conj(conj_tu)__
 10444  10674       (tu) +({w_1})  @@0,$
 10445  10675       <<- morphex(\2, ":V", ":(?:G|[ISK].*:2s)") and not (morph(\2, ":[PQ]", False) and morph(word(-1), ":V0.*:2s", False, False))
 10446  10676       -2>> =suggVerb(@, ":2s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 2ᵉ personne du singulier.
 10447         -__[i]/conj(conj_tu_pronom)__
 10448         -    (tu) +> +({w_1})  @@0,$
 10449         -    <<- morphex(\2, ":V", ":(?:G|[ISK].*:2s)")
 10450         -    -2>> =suggVerb(@, ":2s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 2ᵉ personne du singulier.
        10677  +#__[i]/conj(conj_tu_pronom)__
        10678  +#    (tu) +> +({w_1})  @@0,$
        10679  +#    <<- morphex(\2, ":V", ":(?:G|[ISK].*:2s)")
        10680  +#    -2>> =suggVerb(@, ":2s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 2ᵉ personne du singulier.
 10451  10681   __[i]/conj(conj_toi_qui)__
 10452         -    (toi +qui) +>? *({w_1})  @@0,$
        10682  +    (toi +qui) +({w_1})  @@0,$
 10453  10683       <<- morphex(\2, ":V", ":(?:G|2p|3p!|[ISK].*:2s)")
 10454  10684       -2>> =suggVerb(@, ":2s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 2ᵉ personne du singulier.
 10455  10685   
 10456  10686   TEST: Tu ne {{ment}} jamais.
 10457  10687   TEST: Tu {{a}} mal ?
 10458  10688   TEST: Tu ne le lui {{prend}} pas.
 10459  10689   TEST: Tu ne m’{{attendra}} pas.
 10460  10690   TEST: toi qui n’y {{connait}} rien, ne nous ennuie pas avec tes théories.
 10461  10691   
 10462  10692   
 10463  10693   ## 3sg
 10464  10694   __[i]/conj(conj_il)__
 10465         -    (il) +({w_1})  @@0,$
        10695  +    (?<!t’)(il) +({w_1})  @@0,$
 10466  10696       <<- morphex(\2, ":V", ":(?:3s|P|G)") and not (morph(\2, ":[PQ]", False) and morph(word(-1), ":V0.*:3s", False, False))
 10467  10697       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10468  10698       <<- __also__ and morph(\2, ":3p", False) -1>> ils        # Accord avec « \2 ».
 10469         -__[i]/conj(conj_il_pronom)__
 10470         -    (il) +> +({w_1})  @@0,$
 10471         -    <<- morphex(\2, ":V", ":(?:3s|P|G)")
 10472         -    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10473         -    <<- __also__ and morph(\2, ":3p", False) -1>> ils        # Accord avec « \2 ».
        10699  +#__[i]/conj(conj_il_pronom)__
        10700  +#    (il) +> +({w_1})  @@0,$
        10701  +#    <<- morphex(\2, ":V", ":(?:3s|P|G)")
        10702  +#    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
        10703  +#    <<- __also__ and morph(\2, ":3p", False) -1>> ils        # Accord avec « \2 ».
 10474  10704   
 10475  10705   TEST: {{Il}} {{accusent}}.
 10476  10706   TEST: il {{bus}} du vin.
 10477  10707   TEST: Il {{pris}}.
 10478  10708   TEST: Il {{rougis}}.
 10479  10709   TEST: Il {{suivis}}.
 10480  10710   TEST: Il {{grandis}}.
................................................................................
 10485  10715   TEST: il n’y {{aurais}} plus rien à attendre de la religion et de la politique.
 10486  10716   
 10487  10717   
 10488  10718   __[i]/conj(conj_on)__
 10489  10719       (on) +({w_1})  @@0,$
 10490  10720       <<- morphex(\2, ":V", ":(?:3s|P|G)") and not (morph(\2, ":[PQ]", False) and morph(word(-1), ":V0.*:3s", False, False))
 10491  10721       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10492         -__[i]/conj(conj_on_pronom)__
 10493         -    (on) +> +({w_1})  @@0,$
 10494         -    <<- morphex(\2, ":V", ":(?:3s|P|G)")
 10495         -    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
        10722  +#__[i]/conj(conj_on_pronom)__
        10723  +#    (on) +> +({w_1})  @@0,$
        10724  +#    <<- morphex(\2, ":V", ":(?:3s|P|G)")
        10725  +#    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10496  10726   
 10497  10727   TEST: on {{remué}} beaucoup.
 10498  10728   TEST: on {{refuses}} tout cela
 10499  10729   TEST: on ne se {{bougent}} pas suffisamment
 10500  10730   
 10501  10731   
 10502  10732   __[i]/conj(conj_quiconque)__
 10503  10733       quiconque +({w_1})  @@$
 10504  10734       <<- morphex(\1, ":V", ":(?:3s|P|G|Q.*:m:[si])")
 10505  10735       -1>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « quiconque ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10506         -__[i]/conj(conj_quiconque_pronom)__
 10507         -    quiconque +> +({w_1})  @@$
 10508         -    <<- morphex(\1, ":V", ":(?:3s|P|G)")
 10509         -    -1>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « quiconque ». Le verbe devrait être à la 3ᵉ personne du singulier.
        10736  +#__[i]/conj(conj_quiconque_pronom)__
        10737  +#    quiconque +> +({w_1})  @@$
        10738  +#    <<- morphex(\1, ":V", ":(?:3s|P|G)")
        10739  +#    -1>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « quiconque ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10510  10740   
 10511  10741   TEST: Quiconque {{pensez}} s’en sortir se trompait lourdement.
 10512  10742   TEST: Il voulut punir quiconque s’y {{adonnaient}}.
 10513  10743   TEST: quiconque issu de la gauche n’a aucune chance.
 10514  10744   
 10515  10745   
 10516  10746   __[i]/conj(conj_ce)__
 10517         -    (ce) +>? *({w_1})  @@0,$
        10747  +    (ce) +({w_1})  @@0,$
 10518  10748       <<- morphex(\2, ":V", ":(?:N|A|3s|P|Q|G|V0e.*:3p)")
 10519  10749       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10520  10750   
 10521  10751   __[i]/conj(conj_celui_celle_qui)__
 10522         -    (ce(?:lui|lle|) +qui) +>? *({w_1})  @@0,$
        10752  +    (ce(?:lui|lle|) +qui) +({w_1})  @@0,$
 10523  10753       <<- morphex(\2, ":V", ":(?:3s|P|Q|G)")
 10524  10754       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10525  10755   
 10526  10756   TEST: Ce qui, la plupart du temps, {{donnes}} des maux de tête.
 10527  10757   TEST: Ce qui {{fâchent}} mes amis.
 10528  10758   TEST: celui qui {{pensent}} mal de toute chose
 10529  10759   
 10530  10760   
 10531  10761   __[i]/conj(conj_ça)__
 10532         -    (ça|chacune?|l’une?|ce(?:ci|la|lui-(?:ci|là)|lle-(?:ci|là))|n`importe quo?i|quelqu(?:’une?|e chose))(?: +qui|) +>? *({w_1})  @@0,$
 10533         -    <<- morphex(\2, ":V", ":(?:3s|P|Q|G|3p!)") and not morph(word(-1), ":[VR]|>de", False, False)
        10762  +    (ça|chacune?|l’une?|ce(?:ci|la|lui-(?:ci|là)|lle-(?:ci|là))|n`importe quo?i|quelqu(?:’une?|e chose)) +(?:qui +|)({w_1})  @@0,$
        10763  +    <<- morphex(\2, ":V", ":(?:3s|P|Q|G|3p!)") and not morph(word(-1), ":[VR]|>de ", False, False)
 10534  10764       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10535  10765   
 10536  10766   TEST: chacun {{fais}} comme il peut
 10537  10767   TEST: quelqu’un {{sauras}}
 10538         -TEST: quelqu’une se {{montrent}} désagréable
        10768  +#TEST: quelqu’une se {{montrent}} désagréable  # Fuck you, JavaScript (wait for negative for behind)
 10539  10769   TEST: n’importe quoi {{peux}} réussir
 10540  10770   TEST: n’importe qui {{peux}} y arriver.
 10541  10771   TEST: quelque chose {{sens}} mauvais ici
 10542  10772   TEST: l’un d’eux {{viendras}}
 10543  10773   TEST: ce {{dois}} être ennuyeux
 10544  10774   TEST: ce {{seras}} foutu
 10545  10775   TEST: mais ça ne vous {{aideras}} en rien
 10546  10776   TEST: Cela ne t’{{aideras}} pas.
 10547  10777   TEST: Cela {{dis}}, on ne sait pas comment s’en sortir.
 10548  10778   TEST: Y avait-il seulement quelqu’un pour vouloir soumettre ses recherches ?
 10549  10779   
 10550  10780   
 10551  10781   __[i]/conj(conj_tout)__
 10552         -    tout +>? *({w_1})  @@$
        10782  +    tout +({w_1})  @@$
 10553  10783       <<- morphex(\1, ":V", ":(?:3s|P|Q|Y|G|3p!)") and not morph(word(-1), ":[VRD]|>de", False, False)
 10554  10784       and not( morph(\1, ":(?:Y|N.*:m:[si])", False) and not re.search(" (?:qui|>) ", \0) )
 10555  10785       -1>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « tout ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10556  10786   
 10557  10787   __[i]/conj(conj_tout_qui)__
 10558         -    tout +qui +>? *({w_1})  @@$
        10788  +    tout +qui +({w_1})  @@$
 10559  10789       <<- morphex(\1, ":V", ":(?:3s|P|Q|G|3p!)") and not morph(word(-1), ":[VRD]|>de", False, False)
 10560  10790       and not( morph(\1, ":(?:Y|N.*:m:[si])", False) and not re.search(" (?:qui|>) ", \0) )
 10561  10791       -1>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « tout ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10562  10792   
 10563  10793   TEST: Tout {{reviens}} à ça.
 10564  10794   TEST: Tout qui {{deviens}} fou.
 10565  10795   TEST: Le tout nouveau président de la fondation qui héberge Wikipédia
 10566  10796   TEST: tout discours de sortie nourrit immanquablement la sortie
 10567  10797   TEST: Tout vous expliquer est difficile.
 10568  10798   TEST: J’essaie de bien tout vous expliquer.
 10569  10799   
 10570  10800   
 10571  10801   __[i]/conj(conj_lequel_laquelle)__
 10572         -    (l(?:equel|aquelle))(?: +qui|) +>? *({w_1})  @@0,$
        10802  +    (l(?:equel|aquelle)) +(?:qui +|)({w_1})  @@0,$
 10573  10803       <<- morphex(\2, ":V", ":(?:3s|P|Q|G|3p!)") and not morph(word(-1), ":[VR]|>de", False, False)
 10574  10804       and not( morph(\2, ":Y", False) and not re.search(" (?:qui|>) ", \0) )
 10575  10805       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10576  10806   
 10577  10807   TEST: Lequel {{viendraient}} nous donner des leçons ?
 10578  10808   TEST: Laquelle choisir ?
 10579  10809   TEST: Lequel manger ?
................................................................................
 10594  10824   
 10595  10825   __[i]/conj(conj_elle)__
 10596  10826       (?<![dD]’)(elle) +({w_1})  @@0,$
 10597  10827       <<- morphex(\2, ":V", ":(?:3s|P|G)") and not morph(word(-1), ":R|>(?:et|ou)", False, False)
 10598  10828       and not (morph(\2, ":[PQ]", False) and morph(word(-1), ":V0.*:3s", False, False))
 10599  10829       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10600  10830       <<- __also__ and morph(\2, ":3p", False) -1>> elles      # Accord avec « \2 ».
 10601         -__[i]/conj(conj_elle_pronom)__
 10602         -    (?<![dD]’)(elle) +> +({w_1})  @@0,$
 10603         -    <<- morphex(\2, ":V", ":(?:3s|P|G)") and not morph(word(-1), ":R|>(?:et|ou)", False, False)
 10604         -    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10605         -    <<- __also__ and morph(\2, ":3p", False) -1>> elles      # Accord avec « \2 ».
        10831  +#__[i]/conj(conj_elle_pronom)__
        10832  +#    (?<![dD]’)(elle) +> +({w_1})  @@0,$
        10833  +#    <<- morphex(\2, ":V", ":(?:3s|P|G)") and not morph(word(-1), ":R|>(?:et|ou)", False, False)
        10834  +#    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
        10835  +#    <<- __also__ and morph(\2, ":3p", False) -1>> elles      # Accord avec « \2 ».
 10606  10836   
 10607  10837   TEST: Elle {{conquis}}.
 10608  10838   TEST: Elle {{finis}}.
 10609  10839   TEST: Elle {{pâlis}}.
 10610  10840   TEST: {{Elles}} {{donne}} des leçons.
 10611  10841   TEST: {{Elle}} ne nous {{croient}} jamais.
 10612  10842   TEST: {{elle}} {{sont}} parties.
................................................................................
 10622  10852       <<- -1>> =\1[:-1]+"t"                                    # Conjugaison erronée. Accord avec “mieux” : utilisez la 3ᵉ personne du singulier.
 10623  10853   
 10624  10854   TEST: avec toi qui ne sais rien de rien, mieux {{vaux}} ne rien dire.
 10625  10855   TEST: Mais là-bas mieux {{valais}} ouvrir sa gueule que se taire.
 10626  10856   
 10627  10857   
 10628  10858   __[i]/conj(conj_personne_aucun_rien_nul)__
 10629         -    (personne|aucun|rien|nul(?:le|)) +(?:qui +|)> +({w_1})  @@0,$
        10859  +    (personne|aucun|rien|nul(?:le|)) +(?:qui +|)({w_1})  @@0,$
 10630  10860       <<- morphex(\2, ":V", ":(?:3s|P|G)") and morphex(word(-1), ":C", ":(?:Y|P|Q|[123][sp]|R)", True)
 10631  10861       and not( \1.endswith("ien") and before("> +$") and morph(\2, ":Y", False) )
 10632  10862       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10633  10863   
 10634  10864   TEST: Personne ne {{peux}} me le dire.
 10635  10865   TEST: Rien ne {{sers}} de courir
 10636  10866   TEST: Rien n’{{arrives}} sans raison
................................................................................
 10646  10876   
 10647  10877   __[i]/conj(conj_un_une_des)__
 10648  10878       (une? des {w_2}) +({w_1})  @@0,$
 10649  10879       <<- morphex(\2, ":V", ":(?:3s|P|G|Q)") and morphex(word(-1), ":C", ":(?:Y|P|Q|[123][sp]|R)", True) and not morph(\2, ":[NA].*:[pi]", False)
 10650  10880       -2>> =suggVerb(@, ":3s")                                # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10651  10881   
 10652  10882   TEST: un des ingénieurs {{vinrent}} nous dire quoi faire.
        10883  +TEST: un des membres présents au conseil {{demandent}} un vote à bulletin secret
        10884  +TEST: une des femmes de ce conseil ne {{céderaient}} jamais au chantage.
 10653  10885   TEST: une des femmes présente ses résultats.
 10654  10886   
 10655  10887   
 10656         -__[i]/conj(conj_un_une_des_pronom)__
 10657         -    (une? des {w_2}) +(?:qui +>? *|> +)({w_1})  @@0,$
 10658         -    <<- morphex(\2, ":V", ":(?:3s|P|G)") and morphex(word(-1), ":C", ":(?:Y|P|Q|[123][sp]|R)", True)
        10888  +__[i]/conj(conj_un_une_des_qui)__
        10889  +    (une? des {w_2}) +qui +({w_1})  @@0,$
        10890  +    <<- morphex(\2, ":V", ":(?:3[sp]|P|G)") and morphex(word(-1), ":C", ":(?:Y|P|Q|[123][sp]|R)", True)
 10659  10891       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10660  10892   
 10661         -TEST: un des membres présents au conseil {{demandent}} un vote à bulletin secret
 10662         -TEST: une des femmes de ce conseil ne {{céderaient}} jamais au chantage.
        10893  +TEST: un des chats qui {{venez}} nous ennuyer tous les jours.
        10894  +TEST: un des hommes qui vient.
        10895  +TEST: une des dames qui se sentent mal à l’aise dans cet avion est venue nous trouver.
 10663  10896   TEST: l’un des chants les plus diffusés pendant la Révolution culturelle
 10664  10897   
 10665  10898   
 10666  10899   __[i]/conj(conj_infi)__
 10667         -    ^ *({infi}) +>? *({w_2})  @@*,$
        10900  +    ^ *({infi}) +({w_2})  @@*,$
 10668  10901       <<- morph(\1, ":Y", False) and morph(\2, ":V.[a-z_!?]+(?!.*:(?:3s|P|Q|Y|3p!))") 
 10669  10902       -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10670  10903   
 10671  10904   TEST: manger {{fais}} grossir.
 10672  10905   TEST: boire immodérément {{nuis}} à la santé
 10673  10906   
 10674  10907   
................................................................................
 10693  10926   __[i]/conj(conj_det_sing_nom_qui)__
 10694  10927       (?<![dD]’)(l[ea] |une? |l’|[mts](?:on|a) |ce(?:tte|t|) |leur ) *({w_2}) +qui +({w_2})  @@0,w,$
 10695  10928       <<- not ( re.search("(?i)^(?:une? +(?:dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet) |la +moitié) ", \0)
 10696  10929       and morph(\3, ":3p", False) )
 10697  10930       and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":V", ":(?:3s|P|Q|Y|3p!|G)") and morphex(word(-1), ":C", ":(?:Y|P)", True)
 10698  10931       and not (before(r"(?i)\b(?:et|ou) +$") and morph(\3, ":[123]p", False)) and not before(r"(?i)\bni .* ni ")
 10699  10932       -3>> =suggVerb(@, ":3s")                            # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10700         -__[i]/conj(conj_det_sing_nom_pronom)__
 10701         -    (?<![dD]’)(l[ea] |une? |l’|[mts](?:on|a) |ce(?:tte|t|) |leur |nul(?:le|) ) *({w_2}) +(?:qui +|)> +({w_2})  @@0,w,$
 10702         -    <<- not ( re.search("(?i)^(?:une? +(?:dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet) |la +moitié) ", \0)
 10703         -    and morph(\3, ":3p", False) )
 10704         -    and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":V", ":(?:3s|1p|P|Q|Y|3p!|G)") and morphex(word(-1), ":C", ":(?:Y|P)", True)
 10705         -    and not (before(r"(?i)\b(?:et|ou) +$") and morph(\3, ":[123]p", False)) and not before(r"(?i)\bni .* ni ")
 10706         -    -3>> =suggVerb(@, ":3s")                            # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du singulier.
        10933  +#__[i]/conj(conj_det_sing_nom_pronom)__
        10934  +#    (?<![dD]’)(l[ea] |une? |l’|[mts](?:on|a) |ce(?:tte|t|) |leur |nul(?:le|) ) *({w_2}) +(?:qui +|)> +({w_2})  @@0,w,$
        10935  +#    <<- not ( re.search("(?i)^(?:une? +(?:dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet) |la +moitié) ", \0)
        10936  +#    and morph(\3, ":3p", False) )
        10937  +#    and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":V", ":(?:3s|1p|P|Q|Y|3p!|G)") and morphex(word(-1), ":C", ":(?:Y|P)", True)
        10938  +#    and not (before(r"(?i)\b(?:et|ou) +$") and morph(\3, ":[123]p", False)) and not before(r"(?i)\bni .* ni ")
        10939  +#    -3>> =suggVerb(@, ":3s")                            # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10707  10940   
 10708  10941   TEST: La {{N.S.A.}} {{espionneras}} toujours tout le monde
 10709  10942   TEST: La suspicion envers les élus {{accroissaient}}…                                               ->> accroissait
 10710  10943   TEST: Le chien n’{{es}} pas mort.
 10711  10944   TEST: Ce roman-là de Jean-Paul Sartre {{es}} passionnant.
 10712  10945   TEST: Cette confusion qui {{donnent}} le tournis.
 10713  10946   TEST: La Corée {{peux}} gagner.
................................................................................
 10736  10969   TEST: La moitié d’entre elles voient leurs loyers diminuer depuis le début de l’année
 10737  10970   TEST: Une partie de ces propositions étaient naïves
 10738  10971   TEST: tu n’acceptais jamais de danser avec quelqu’un si tu avais refusé à quelqu’un d’autre au début
 10739  10972   
 10740  10973   
 10741  10974   ## 1pl
 10742  10975   __[i]/conj(conj_nous_pronom)__
 10743         -    ^ *nous +> +({w1})  @@$
        10976  +    ^ *nous +({w1})  @@$
 10744  10977       <<- morphex(\1, ":V", ":(?:1p|3[sp])") and not after("^ +(?:je|tu|ils?|elles?|on|[vn]ous)")
 10745  10978       -1>> =suggVerb(@, ":1p")                                 # Conjugaison erronée. Accord avec « nous ». Le verbe devrait être à la 1ʳᵉ personne du pluriel.
 10746  10979   __[i]/conj(conj_nous_qui)__
 10747         -    ^ *nous +qui +>? *({w1})  @@$
        10980  +    ^ *nous +qui +({w1})  @@$
 10748  10981       <<- morphex(\1, ":V", ":[13]p") and not after("^ +(?:je|tu|il|elle|on|[vn]ous)")
 10749  10982       -1>> =suggVerb(@, ":1p")                                 # Conjugaison erronée. Accord avec « nous ». Le verbe devrait être à la 1ʳᵉ personne du pluriel.
 10750  10983   __[i]/conj(conj_nous)__
 10751         -    ^ *nous +(?:qui +(?:> +|)|> +)(\w+ont)  @@$
        10984  +    ^ *nous +(?:qui +|)(\w+ont)  @@$
 10752  10985       <<- morphex(\1, ":V", ":1p") and not after("^ +(?:ils|elles)")
 10753  10986       -1>> =suggVerb(@, ":1p")                                 # Conjugaison erronée. Accord avec « nous ». Le verbe devrait être à la 1ʳᵉ personne du pluriel.
 10754  10987   
 10755  10988   TEST: nous {{donné}} trop de considération
 10756  10989   TEST: nous vous {{donnerez}} trop de considération
 10757  10990   TEST: nous qui {{somme}} si savants
 10758  10991   TEST: nous qui {{mourront}} pour toi.
 10759  10992   
 10760  10993   
 10761  10994   ## 2pl
 10762  10995   __[i]/conj(conj_vous_pronom)__
 10763         -    ^ *vous +> +({w1})  @@$
        10996  +    ^ *vous +({w1})  @@$
 10764  10997       <<- morphex(\1, ":V", ":(?:2p|3[sp])") and not after("^ +(?:je|ils?|elles?|on|[vn]ous)")
 10765  10998       -1>> =suggVerb(@, ":2p")                                 # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.
 10766  10999   __[i]/conj(conj_vous_qui)__
 10767         -    ^ *vous +qui +>? *({w1})  @@$
        11000  +    ^ *vous +qui +({w1})  @@$
 10768  11001       <<- morphex(\1, ":V", ":2p") and not after("^ +(?:je|ils?|elles?|on|[vn]ous)")
 10769  11002       -1>> =suggVerb(@, ":2p")                                 # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.
 10770  11003   
 10771  11004   TEST: vous {{donné}} du bonheur
 10772  11005   TEST: vous lui {{donner}} du temps
 10773  11006   TEST: vous qui {{avançait}} dans la nuit comme des ombres furtives
 10774  11007   
................................................................................
 10776  11009   
 10777  11010   ## 3pl
 10778  11011   __[i]/conj(conj_ils)__
 10779  11012       (ils) +({w_2})  @@0,$
 10780  11013       <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not (morph(\2, ":[PQ]", False) and morph(word(-1), ":V0.*:3p", False, False))
 10781  11014       -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10782  11015       <<- __also__ and morph(\2, ":3s", False) -1>> il        # Accord avec « \2 ».
 10783         -__[i]/conj(conj_ils_pronom)__
 10784         -    (ils) +> +({w_2})  @@0,$
 10785         -    <<- morphex(\2, ":V", ":(?:3p|P|G)") -2>> =suggVerb(@, ":3p")   # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10786         -    <<- __also__ and morph(\2, ":3s", False) -1>> il                # Accord avec « \2 ».
        11016  +#__[i]/conj(conj_ils_pronom)__
        11017  +#    (ils) +> +({w_2})  @@0,$
        11018  +#    <<- morphex(\2, ":V", ":(?:3p|P|G)") -2>> =suggVerb(@, ":3p")   # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
        11019  +#    <<- __also__ and morph(\2, ":3s", False) -1>> il                # Accord avec « \2 ».
 10787  11020   
 10788  11021   TEST: {{Ils}} {{vienne}} souvent.
 10789  11022   TEST: Ils ne m’{{attends}} pas.
 10790  11023   TEST: {{Ils}} vous le {{donne}}.
 10791  11024   
 10792  11025   
 10793  11026   __[i]/conj(conj_ceux_celles_qui)__
 10794         -    (ce(?:ux|lles) +qui) +>? *({w_1})  @@0,$
        11027  +    (ce(?:ux|lles) +qui) +({w_1})  @@0,$
 10795  11028       <<- morphex(\2, ":V", ":(?:3p|P|Q|G)")
 10796  11029       -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10797  11030   
 10798  11031   TEST: Ceux qui {{chante}} toute la journée…
 10799  11032   TEST: Celles qui {{pense}}.
 10800  11033   
 10801  11034   
 10802  11035   __[i]/conj(conj_ceux_là_celles_ci_lesquels)__
 10803         -    (ce(?:ux-(?:ci|là)|lles-(?:ci|là))|lesquel(?:le|)s)(?: +qui|) +>? *({w_1})  @@0,$
        11036  +    (ce(?:ux-(?:ci|là)|lles-(?:ci|là))|lesquel(?:le|)s) +(?:qui +|)({w_1})  @@0,$
 10804  11037       <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]", False, False)
 10805  11038       and not (morph(\2, ":Y", False) and re.search(r"(?i)lesquel", \1) and not re.search(" qui |>", \0))
 10806  11039       -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 10807  11040   
 10808  11041   TEST: lesquels {{devienne}} des ennuyeux incomparables.
 10809  11042   TEST: Mais parmi les millions de causes à défendre, lesquelles choisir ?
 10810  11043   
 10811  11044   
 10812  11045   __[i]/conj(conj_elles)__
 10813  11046       (?<![dD]’)(elles) +({w_2})  @@0,$
 10814  11047       <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":R", False, False) and not (morph(\2, ":[PQ]", False) and morph(word(-1), ":V0.*:3p", False, False))
 10815  11048       -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10816  11049       <<- __also__ and morph(\2, ":3s", False) -1>> elle      # Accord avec « \2 ».
 10817         -__[i]/conj(conj_elles_pronom)__
 10818         -    (?<![dD]’)(elles) +> +({w_2})  @@0,$
 10819         -    <<- morphex(\2, ":V", ":(?:3p|P|G)") and not morph(word(-1), ":R", False, False)
 10820         -    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10821         -    <<- __also__ and morph(\2, ":3s", False) -1>> elle      # Accord avec « \2 ».
        11050  +#__[i]/conj(conj_elles_pronom)__
        11051  +#    (?<![dD]’)(elles) +> +({w_2})  @@0,$
        11052  +#    <<- morphex(\2, ":V", ":(?:3p|P|G)") and not morph(word(-1), ":R", False, False)
        11053  +#    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
        11054  +#    <<- __also__ and morph(\2, ":3s", False) -1>> elle      # Accord avec « \2 ».
 10822  11055   
 10823  11056   TEST: {{elles}} {{avance}} rapidement sur ce projet
 10824  11057   TEST: {{Elles}} n’y {{comprenne}} rien
 10825  11058   TEST: L’expérience sensible qu’il nous restera bientôt d’elles est à peu près
 10826  11059   
 10827  11060   
 10828  11061   # on / ont
................................................................................
 10843  11076   TEST: j’ai, tu as, ils ont, elles {{on}}
 10844  11077   TEST: Or parmi celles-ci on trouve typiquement d’un côté les structures
 10845  11078   
 10846  11079   
 10847  11080   # L’accord par syllepse est obligatoire après /la plupart/, ainsi qu’après /nombre/ et /quantité/ employés sans déterminant. L’accord se fait avec le « pseudo-complément ».
 10848  11081   
 10849  11082   __[i]/conj(conj_beaucoup_d_aucuns_la_plupart)__
 10850         -    (beaucoup|d’aucuns|la plupart) +>? *({w_2})  @@0,$
        11083  +    (beaucoup|d’aucuns|la plupart) +({w_2})  @@0,$
 10851  11084       <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]|>de ", False, False)
 10852  11085       -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10853  11086   
 10854  11087   __[i]/conj(conj_beaucoup_d_aucuns_la_plupart_qui)__
 10855         -    (beaucoup|d’aucuns|la plupart) +qui +>? *({w_2})  @@0,$
        11088  +    (beaucoup|d’aucuns|la plupart) +qui +({w_2})  @@0,$
 10856  11089       <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]", False, False)
 10857  11090       -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10858  11091   
 10859  11092   TEST: la plupart des hommes {{vienne}}
 10860  11093   TEST: La plupart {{admet}}
 10861  11094   TEST: beaucoup {{vienne}}
 10862  11095   TEST: d’aucuns {{pense}} que c’est faux
 10863  11096   TEST: beaucoup qui ne {{pense}} jamais à rien, mais qui ont quand même des avis sur tout.
 10864  11097   TEST: beaucoup entre la peste et le choléra.
 10865  11098   
 10866  11099   
 10867  11100   __[i]/conj(conj_certains_tous_plusieurs)__
 10868         -    (?<!de )(certaine?s|tou(?:te|)s|plusieurs)(?: +qui|) +>? *({w_2})  @@0,$
        11101  +    (?<!de )(certaine?s|tou(?:te|)s|plusieurs) +(?:qui +|)({w_2})  @@0,$
 10869  11102       <<- morphex(\2, ":V", ":(?:G|N|A|3p|P|Q)") and not morph(word(-1), ":[VR]", False, False)
 10870  11103       -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10871  11104   
 10872  11105   TEST: certains {{prenne}} leur temps
 10873  11106   TEST: Plusieurs qui {{pense}} que c’est une arnaque se sont quand même trompés.
 10874  11107   
 10875  11108   
................................................................................
 10882  11115       <<- __else__ and isAmbiguousAndWrong(\2, \3, ":p", ":3p")
 10883  11116       -3>> =suggVerb(@, ":3p", suggPlur)                      # Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
 10884  11117   __[i]/conj(conj_det_plur_nom_qui)__
 10885  11118       ([cmts]es|[nv]os|leurs|quelques) +({w_2}) +qui +({w_2})  @@0,w,$
 10886  11119       <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Y|G|A.*:e:[pi])") and morphex(word(-1), ":C", ":[YP]", True)
 10887  11120       and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
 10888  11121       -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10889         -__[i]/conj(conj_det_plur_nom_pronom)__
 10890         -    ([cmts]es|[nv]os|leurs|quelques) +({w_2}) +(?:qui +|)> +({w_2})  @@0,w,$
 10891         -    <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Y|G)") and morphex(word(-1), ":C", ":[YP]", True)
 10892         -    and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
 10893         -    -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
        11122  +#__[i]/conj(conj_det_plur_nom_pronom)__
        11123  +#    ([cmts]es|[nv]os|leurs|quelques) +({w_2}) +(?:qui +|)> +({w_2})  @@0,w,$
        11124  +#    <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Y|G)") and morphex(word(-1), ":C", ":[YP]", True)
        11125  +#    and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        11126  +#    -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10894  11127   
 10895  11128   TEST: Ses « chiens » {{coure}} sur ma pelouse.
 10896  11129   TEST: mes filles {{passe}} ce matin
 10897  11130   TEST: vos filles {{passes}} ce matin
 10898  11131   TEST: ces travaux qui {{demande}} tant d’efforts.
 10899  11132   TEST: vos questions ne {{réclame}} aucune réflexion.
 10900  11133   TEST: le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler.
................................................................................
 10913  11146       <<- __else__ and (\1 == "certaines" or \1 == "Certaines") and isVeryAmbiguousAndWrong(\2, \3, ":f:p", ":3p", isStart())
 10914  11147       -3>> =suggVerb(@, ":3p", suggFemPlur)                   # Accord avec « certaines \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
 10915  11148   __[i]/conj(conj_det_plur_nom_qui_confusion)__
 10916  11149       (les|certaine?s|plusieurs) +({w_2}) +qui +({w_2})  @@0,w,$
 10917  11150       <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Q|Y|G|A.*:e:[pi])") and morphex(word(-1), ":C", ":[YP]", True)
 10918  11151       and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
 10919  11152       -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10920         -__[i]/conj(conj_det_plur_nom_pronom_confusion)__
 10921         -    (les|certaine?s|plusieurs) +({w_2}) +(?:qui +|)> +({w_2})  @@0,w,$
 10922         -    <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Y|G)") and morphex(word(-1), ":C", ":[YP]", True)
 10923         -    and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
 10924         -    -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
        11153  +#__[i]/conj(conj_det_plur_nom_pronom_confusion)__
        11154  +#    (les|certaine?s|plusieurs) +({w_2}) +(?:qui +|)> +({w_2})  @@0,w,$
        11155  +#    <<- morph(\2, ":[NAQ].*:[pi]", False) and morphex(\3, ":V", ":(?:[13]p|P|Y|G)") and morphex(word(-1), ":C", ":[YP]", True)
        11156  +#    and not( morph(\3, ":3s", False) and before(r"(?i)\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        11157  +#    -3>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 \2… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10925  11158   
 10926  11159   TEST: Les abstentions {{est}} présumée manifester un défaut d’opinion marquée
 10927  11160   TEST: Les cours de culture générale nous {{apporte}} de l’ouverture d’esprit.
 10928  11161   TEST: Les hommes ne le lui {{pardonnes}} pas.
 10929  11162   TEST: Les infirmières à mi-temps ne {{travaille}} pas dans cette aile.
 10930  11163   TEST: les données, en quantité plus que suffisante, {{indique}} que…
 10931  11164   TEST: Les hommes comme celui-là {{mange}} comme deux.
................................................................................
 10958  11191   
 10959  11192   
 10960  11193   __[i]/conj(conj_des_nom1)__
 10961  11194       ^ *des +({w_2}) +({w_2})  @@w,$
 10962  11195       <<- morph(\1, ":[NAQ].*:[pi]", False) and morphex(\2, ":V", ":(?:[13]p|P|G|Q|A.*:[pi])") and morph(word(1), ":(?:R|D.*:p)|>au ", False, True) >>>
 10963  11196       <<- not morph(\2, ":[NA]", False) -2>> =suggVerb(@, ":3p")                          # Conjugaison erronée. Accord avec « des \1… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10964  11197       <<- __else__ and not checkAgreement(\1, \2) -2>> =suggVerb(@, ":3p", suggPlur)      # Conjugaison erronée. Accord avec « des \1… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10965         -__[i]/conj(conj_des_nom2)__
 10966         -    ^ *des +({w_2}) +> +({w_2})  @@w,$
 10967         -    <<- morph(\1, ":[NAQ].*:[pi]", False) and morphex(\2, ":V", ":(?:[13]p|P|G|Q)") and morph(word(1), ":(?:R|D.*:p)|>au ", False, True)
 10968         -    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « des \1… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
        11198  +#__[i]/conj(conj_des_nom2)__
        11199  +#    ^ *des +({w_2}) +> +({w_2})  @@w,$
        11200  +#    <<- morph(\1, ":[NAQ].*:[pi]", False) and morphex(\2, ":V", ":(?:[13]p|P|G|Q)") and morph(word(1), ":(?:R|D.*:p)|>au ", False, True)
        11201  +#    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « des \1… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10969  11202   __[i]/conj(conj_des_nom_qui)__
 10970         -    ^ *des +({w_2}) +qui +(?:> +|)({w_2})  @@w,$
        11203  +    ^ *des +({w_2}) +qui +({w_2})  @@w,$
 10971  11204       <<- morph(\1, ":[NAQ].*:[pi]", False) and morphex(\2, ":V", ":(?:[13]p|P|G)")
 10972  11205       -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « des \1… ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 10973  11206   
 10974  11207   TEST: Des hommes {{arrive}}.
 10975  11208   TEST: Des femmes ne {{demande}} rien.
 10976  11209   TEST: des femmes qui {{conduise}} la marche du monde.
 10977  11210   
................................................................................
 11017  11250   
 11018  11251   
 11019  11252   
 11020  11253   #### NOMS PROPRES
 11021  11254   
 11022  11255   # 3sg
 11023  11256   __[s]/conj(conj_nom_propre)__
 11024         -    ([A-ZÉÈ][\w-]+) +>? *({w_1})  @@0,$
        11257  +    ([A-ZÉÈ][\w-]+) +({w_1})  @@0,$
 11025  11258       <<- not before(r"\b(?:et |ou |[dD][eu] |ni |[dD]e l’) *$") and morph(\1, ":M", False) and morphex(\2, ":[123][sp]", ":(?:G|3s|3p!|P|M|[AQ].*:[si])")
 11026  11259       and not morph(word(-1), ":[VRD]", False, False) and not before(r"([A-ZÉÈ][\w-]+), +([A-ZÉÈ][\w-]+), +$")
 11027  11260       and not (morph(\2, ":3p", False) and word(-1))
 11028  11261       -2>> =suggVerb(@, ":3s")
 11029  11262       # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
 11030  11263   
 11031  11264   TEST: Marc {{arrives}} demain.
................................................................................
 11035  11268   TEST: Les fondateurs pionniers de l’Internet n’avaient pas prévu
 11036  11269   TEST: les compteurs Geiger ne détectent pas le polonium
 11037  11270   TEST: Des femmes de l’administration Obama y racontent qu’elles ont constaté qu’il leur arrivait régulièrement de ne pas être invitées
 11038  11271   
 11039  11272   
 11040  11273   # 3pl
 11041  11274   __[s]/conj(conj_nom_propre_et_nom_propre)__
 11042         -    (?<!et |ou |[dD][eu] |ni )([A-ZÉÈ][\w-]+) et ([A-ZÉÈ][\w-]+) +>? *({w_1})  @@0,w,$
        11275  +    (?<!et |ou |[dD][eu] |ni )([A-ZÉÈ][\w-]+) et ([A-ZÉÈ][\w-]+) +({w_1})  @@0,w,$
 11043  11276       <<- morph(\1, ":M", False) and morph(\2, ":M", False)
 11044  11277       and morphex(\3, ":[123][sp]", ":(?:G|3p|P|Q.*:[pi])") and not morph(word(-1), ":R", False, False)
 11045  11278       -3>> =suggVerb(@, ":3p")
 11046  11279       # Conjugaison erronée. Accord avec « \1 et \2 ». Le verbe devrait être à la 3ᵉ personne du pluriel.
 11047  11280   
 11048  11281   TEST: Samantha et Eva {{viennes}} demain.
 11049  11282   TEST: Samantha et Eva leur {{décrive}} une leçon.
................................................................................
 11087  11320       (?:que?|où|comment|combien|dont|quand|pourquoi|l[ea]s?quel(?:le|)s?) +({w_1}[es])(?! je| tu) @@$
 11088  11321       <<- morphex(\1, ":[12][sp]", ":(?:G|W|3[sp]|Y|P|Q|N)") -1>> =suggVerb(@, ":3s")     # Conjugaison erronée. Ce verbe devrait être à la 3ᵉ personne.
 11089  11322   
 11090  11323   TEST: Qu’est-ce que tu crois que {{deviens}} réellement, immanquablement et subitement cet homme après une telle dérouillée ?
 11091  11324   TEST: ces sciences, ces religions, ces philosophies ne sont que contes destinés à nous donner l’illusion de la connaissance.
 11092  11325   
 11093  11326   
 11094         -__[i]/conj(conj_que_où_verbe_sujet_3sg)__
 11095         -    (?:que?|où|comment|combien|dont|quand|pourquoi|l[ea]s?quel(?:le|)s?) +> +({w_1})(?! [jJ]e| [tT]u| [nNvV]ous| [eE]t )  @@$
 11096         -    <<- morphex(\1, ":[12][sp]", ":(?:G|W|3[sp])") -1>> =suggVerb(@, ":3s")         # Conjugaison erronée. Ce verbe devrait être à la 3ᵉ personne.
        11327  +#__[i]/conj(conj_que_où_verbe_sujet_3sg)__
        11328  +#    (?:que?|où|comment|combien|dont|quand|pourquoi|l[ea]s?quel(?:le|)s?) +({w_1})(?! [jJ]e| [tT]u| [nNvV]ous| [eE]t )  @@$
        11329  +#    <<- morphex(\1, ":[12][sp]", ":(?:G|W|N|3[sp])") -1>> =suggVerb(@, ":3s")         # Conjugaison erronée. Ce verbe devrait être à la 3ᵉ personne.
 11097  11330   
 11098  11331   TEST: peu importe ce que tu crois du lieu où l’{{abandonnerais}} ce salopard…
 11099  11332   
 11100  11333   
 11101  11334   __[i]/conj(conj_puisse)__
 11102  11335       (puisses?) ({w_2})  @@0,$
 11103  11336       <<- isStart() >>>
................................................................................
 11113  11346   !!
 11114  11347   !!
 11115  11348   !!!! Formes interrogatives ?                                                                        
 11116  11349   !!
 11117  11350   !!
 11118  11351   
 11119  11352   __[i]/inte(inte_union_xxxe_je)__
 11120         -    (?<![jJ]’)({w_2}[éèe]) je(?! +[nmts]’)  @@0
 11121         -    <<- morphex(\1, ":V.*:1[sŝś]", ":[GNW]") and not before(r"(?i)\bje +>? *$") and not morph(word(1), ":(?:Oo|X|1s)", False, False)
        11353  +    (?<![jJ]’)({w_2}[éèe]) je  @@0
        11354  +    <<- morphex(\1, ":V.*:1[sŝś]", ":[GNW]") and not before(r"(?i)\bje +$") and morphex(word(1), ":", ":(?:Oo|X|1s)", True)
 11122  11355       ->> =\1[:-1]+"é-je"                                                                             # Forme interrogative ? Mettez un trait d’union.
 11123  11356   __[i]/inte(inte_union_xxx_je)__
 11124         -    (?<![jJ]’)({w_2}[is]) je(?! +[nmts]’)  @@0
 11125         -    <<- morphex(\1, ":V.*:1s", ":[GNW]") and not before(r"(?i)\b(?:je|tu) +>? *$") and not morph(word(1), ":(?:Oo|X|1s)", False, False)
        11357  +    (?<![jJ]’)({w_2}[is]) je  @@0
        11358  +    <<- morphex(\1, ":V.*:1s", ":[GNW]") and not before(r"(?i)\b(?:je|tu) +$") and morphex(word(1), ":", ":(?:Oo|X|1s)", True)
 11126  11359       ->> \1-je                                                                                       # Forme interrogative ? Mettez un trait d’union.
 11127  11360   __[i]/inte(inte_union_tu)__
 11128  11361       ({w_1}s) tu  @@0
 11129         -    <<- not after("^ +(?:en|y|ne|>)") and morphex(\1, ":V.*:2s", ":[GNW]") and not before(r"(?i)\b(?:je|tu) +>? *$")
        11362  +    <<- morphex(\1, ":V.*:2s", ":[GNW]") and not before(r"(?i)\b(?:je|tu) +$") and morphex(word(1), ":", ":2s", True)
 11130  11363       ->> \1-tu                                                                                       # Forme interrogative ? Mettez un trait d’union.
 11131  11364   __[i]/inte(inte_union_il_on)__
 11132  11365       ({w_2}[td]) (?:il|on)  @@0
 11133         -    <<- not after("^ +(?:en|y|ne|>)") and morphex(\1, ":V.*:3s", ":[GNW]") and not before(r"(?i)\b(?:ce|il|elle|on) +>? *$")
        11366  +    <<- morphex(\1, ":V.*:3s", ":[GNW]") and not before(r"(?i)\b(?:ce|il|elle|on) +$") and morphex(word(1), ":", ":3s|>y ", True)
 11134  11367       ->> =\0.replace(" ", "-")                                                                       # Forme interrogative ? Mettez un trait d’union.
 11135  11368   __[i]/inte(inte_union_elle)__
 11136  11369       (?<![cC]’)({w_2}[td]) elle  @@0
 11137         -    <<- not after("^ +(?:en|y|ne|aussi|>)") and morphex(\1, ":V.*:3s", ":[GNW]") and not before(r"(?i)\b(?:ce|il|elle|on) +>? *$")
        11370  +    <<- morphex(\1, ":V.*:3s", ":[GNW]") and not before(r"(?i)\b(?:ce|il|elle|on) +$") and morphex(word(1), ":", ":3s", True)
 11138  11371       ->> \1-elle                                                                                     # Forme interrogative ? Mettez un trait d’union.
 11139  11372   __[i]/inte(inte_union_nous)__
 11140  11373       ({w_2}ons) nous  @@0
 11141         -    <<- not after("^ +(?:en|y|ne|aussi|>)") and morphex(\1, ":V.*:1p", ":[GNW]")
 11142         -    and not morph(word(-1), ":Os", False, False) and not morph(word(1), ":Y", False, False)
        11374  +    <<- morphex(\1, ":V.*:1p", ":[GNW]") and not morph(word(-1), ":Os", False, False) and morphex(word(1), ":", ":(?:Y|1p)", True)
 11143  11375       ->> \1-nous                                                                                     # Forme interrogative ? Mettez un trait d’union.
 11144  11376   __[i]/inte(inte_union_vous)__
 11145  11377       ({w_2}ez) vous  @@0
 11146         -    <<- not after("^ +(?:en|y|ne|aussi|>)") and not \1.endswith("euillez") and morphex(\1, ":V.*:2p", ":[GNW]")
 11147         -    and not morph(word(-1), ":Os", False, False) and not morph(word(1), ":Y", False, False)
        11378  +    <<- morphex(\1, ":V.*:2p", ":[GNW]|>vouloir .*:E:2p") and not morph(word(-1), ":Os", False, False) and morphex(word(1), ":", ":(?:Y|2p)", True)
 11148  11379       ->> \1-vous                                                                                     # Forme interrogative ? Mettez un trait d’union.
 11149  11380   __[i]/inte(inte_union_ils_elles)__
 11150  11381       (?<![cC]’)({w_1}nt) (?:ils|elles)  @@0
 11151         -    <<- not after("^ +(?:en|y|ne|aussi|>)") and morphex(\1, ":V.*:3p", ":[GNW]") and not before(r"(?i)\b(?:ce|ils|elles) +>? *$")
        11382  +    <<- morphex(\1, ":V.*:3p", ":[GNW]") and not before(r"(?i)\b(?:ce|ils|elles) +$") and morphex(word(1), ":", ":3p", True)
 11152  11383       ->> =\0.replace(" ", "-")                                                                       # Forme interrogative ? Mettez un trait d’union.
 11153  11384   
 11154  11385   TEST: {{mangé je}} {{ça}} avec dégoût ?
 11155  11386   TEST: {{viendrais je}} à la fête ?
 11156  11387   TEST: {{Seras tu}} là ?
 11157  11388   TEST: {{prend on}} le temps d’y réfléchir ?
 11158  11389   TEST: {{vient elle}} souvent ?
 11159  11390   TEST: {{viennent elles}} souvent ?
 11160  11391   TEST: {{retrouverons nous}} enfin la tranquilité ?
 11161  11392   TEST: Mais {{soutiendrez vous}} cette proposition ?
 11162  11393   TEST: {{Viendront ils}} demain ?
 11163  11394   TEST: je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça.
        11395  +TEST: Veuillez vous instruire avant de contester ces mesures.
 11164  11396   TEST: C’était elle qui avait pris le contrôle.
 11165  11397   
 11166  11398   
 11167  11399   __[i]/inte(inte_je)__
 11168  11400       ({w1})-je  @@0
 11169  11401       <<- morphex(\1, ":V", ":1[sśŝ]") -1>> =suggVerb(@, ":1ś")                                       # Forme interrogative : « \1 » n’est pas un verbe à la 1ʳᵉ personne du singulier.
 11170  11402       <<- not morph(\1, ":V", False) -1>> =suggSimil(\1, ":1[sśŝ]")                                   # Forme interrogative : « \1 » n’est pas un verbe à la 1ʳᵉ personne du singulier.
................................................................................
 11243  11475   
 11244  11476   !!!! Verbe auxiliaire                                                                               
 11245  11477   
 11246  11478   __[i]/conf(conf_avoir_sujet_participe_passé)__
 11247  11479       ({avoir})-(?:je|tu|ils?|elles?|on) +({ppas})  @@0,$
 11248  11480       <<- morph(\1, ">avoir ", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.
 11249  11481   __[i]/conf(conf_sujet_avoir_participe_passé)__
 11250         -    (?:j’|je |tu |ils? |elles? |on ) *>? *({avoir}) +({ppas})  @@*,$
        11482  +    (?:j’|je |tu |ils? |elles? |on ) *({avoir}) +({ppas})  @@*,$
 11251  11483       <<- morph(\1, ">avoir ", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.
 11252  11484   
 11253  11485   TEST: {{Ait}}-il arrivé à ses fins ?
 11254  11486   TEST: je n’{{avais}} pas parti avec eux.
 11255  11487   TEST: Avais-je partie liée avec lui ?
 11256  11488   TEST: il {{avait}} parti.
 11257  11489   
................................................................................
 11263  11495   !!
 11264  11496   !!
 11265  11497   
 11266  11498   # conditionnel / futur
 11267  11499   
 11268  11500   __[i]/vmode(vmode_j_aimerais_vinfi)__
 11269  11501       j(?:e +|’)(aimerai|préf[éè]rerai|apprécierai|voudrai|souhaiterai|désirerai|adorerai) +({w_1})  @@w,$
 11270         -    <<- morphex(\2, ":[YX]|>y ", "R") and isStart() -1>> \1s        # Si vous exprimez un souhait, utilisez le conditionnel et non le futur.
 11271         -__[i>/vmode(vmode_j_aimerais_pronom)__
 11272         -    j(?:e +|’)(aimerai|préf[éè]rerai|apprécierai|voudrai|souhaiterai|désirerai|adorerai) +(?:que? |>)  @@w
 11273         -    <<- isStart() -1>> \1s                                          # Si vous exprimez un souhait, utilisez le conditionnel et non le futur.
        11502  +    <<- morphex(\2, ":[YX]|>(?:y|ne|que?) ", ":R") and isStart() -1>> \1s                           # Si vous exprimez un souhait, utilisez le conditionnel et non le futur.
 11274  11503   
 11275  11504   TEST: J’{{aimerai}} savoir ce dont il retourne.
 11276  11505   TEST: dans tous les cas j’{{aimerai}} ne rien savoir
 11277  11506   TEST: Je {{voudrai}} qu’il soit déjà là.
 11278  11507   TEST: J’aimerai ces cours-là autant que les autres.
 11279  11508   TEST: J’aimerai la danse et la musique, puisque vous l’exigez.
 11280  11509   TEST: Je sais que j’aimerai ça, tout comme lui.
 11281  11510   
 11282  11511   
 11283         -__[i>/vmode(vmode_j_aurais_aimé_que_avoir_être1)__
 11284         -    j’(aurai) +(?:aimé|souhaité|préféré|voulu|apprécié|désiré) +(?:que? |ne |> )  @@2
 11285         -    <<- -1>> aurais|eusse                           # Pour un souhait passé, utilisez le conditionnel passé et non le futur antérieur. Exemple pour le futur antérieur : « quand j’aurai fini… »
 11286         -__[i]/vmode(vmode_j_aurais_aimé_que_avoir_être2)__
 11287         -    j’(aurai) +(?:aimé|souhaité|préféré|voulu|apprécié|désiré) +(?:[nmtsl]’|)({infi})  @@2,$
 11288         -    <<- morph(\2, ":Y", False)
        11512  +__[i]/vmode(vmode_j_aurais_aimé_que_avoir_être)__
        11513  +    j’(aurai) +(?:aimé|souhaité|préféré|voulu|apprécié|désiré|adoré) +(que?|ne|{infi})  @@2,$
        11514  +    <<- morph(\2, ":Y|>(?:ne|que?) ", False)
 11289  11515       -1>> aurais|eusse                               # Pour un souhait passé, utilisez le conditionnel passé et non le futur antérieur. Exemple pour le futur antérieur : « quand j’aurai fini… »
 11290  11516   
 11291  11517   TEST: J’{{aurai}} aimé nous offrir ce magnifique cadeau.
 11292  11518   TEST: j’{{aurai}} voulu être un artiste.
 11293  11519   TEST: j’{{aurai}} préféré ne pas avoir à l’entendre.
        11520  +TEST: j’{{aurai}} préféré l’entendre un autre jour.
        11521  +TEST: j’{{aurai}} aimé que vous m’en parliez.
 11294  11522   TEST: Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître.
 11295  11523   TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
 11296  11524   TEST: Quand j’aurai soif et faim, je m’arrêterai.
 11297  11525   
 11298  11526   
 11299  11527   # Si suivi du conditionnel ou du subjonctif
 11300  11528   __[i]/vmode(vmode_si_sujet1)__
 11301         -    si +({w1}) +>? *({w_2})  @@w,$
        11529  +    si +({w1}) +({w_2})  @@w,$
 11302  11530       <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":[SK]", ":(?:G|V0|I)") and isStart()
 11303  11531       -2>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.
 11304  11532   __[i]/vmode(vmode_si_sujet2)__
 11305         -    (?:si [jt]’|s’ils? )>? *({w_2})  @@$
        11533  +    (?:si [jt]’|s’ils? +)({w_2})  @@$
 11306  11534       <<- morphex(\1, ":[SK]", ":(?:G|V0|I)") and isStart()
 11307  11535       -1>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.
 11308  11536   
 11309  11537   TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
 11310  11538   TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.
 11311  11539   
 11312  11540   
 11313  11541   # Dès que + indicatif
 11314  11542   __[i]/vmode(vmode_dès_que)__
 11315         -    dès +que? +({w_2}) +>? *({w_2})  @@w,$
        11543  +    dès +que? +({w_2}) +({w_2})  @@w,$
 11316  11544       <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":S", ":[IG]")    -2>> =suggVerbMode(@, ":I", \1)     # Ce verbe ne devrait pas être au subjonctif.
 11317  11545   #    <<- morph(\1, ":(?:Os|M)", False) and morph(\2, ":K", False)        -2>> =suggVerbMode(@, ":If", \1)    # Ce verbe ne devrait pas être au conditionnel.
 11318  11546   
 11319  11547   #TEST: dès que je le {{verrais}}
 11320  11548   TEST: dès qu’il le {{voie}}
 11321  11549   TEST: donnant à entendre qu’il avait l’intention de violer Laura dès qu’il en aurait l’occasion
 11322  11550   
 11323  11551   
 11324  11552   # verbe que + subjonctif
 11325  11553   __[i]/vmode(vmode_qqch_que_subjonctif1)__
 11326         -    (afin|avant|pour|quoi|(?:perm|fa|v[oe]|ordonn|exig|désir|dout|suff|préf[éè]r)\w+) +que? +({w_2}) +>? *({w_2})  @@0,w,$
        11554  +    (afin|avant|pour|quoi|(?:perm|fa|v[oe]|ordonn|exig|désir|dout|suff|préf[éè]r)\w+) +que? +({w_2}) +({w_2})  @@0,w,$
 11327  11555       <<- morph(\1, ">(?:afin|avant|pour|quoi|permettre|falloir|vouloir|ordonner|exiger|désirer|douter|préférer|suffire) ", False)
 11328  11556       and morph(\2, ":(?:Os|M)", False) and morphex(\3, ":I", ":[GYS]")
 11329  11557       and not (morph(\1, ">douter ", False) and morph(\3, ":(?:If|K)", False))
 11330  11558       -3>> =suggVerbMode(@, ":S", \2)                                                 # Après « \1 que », ce verbe devrait être au subjonctif.
 11331  11559   
 11332  11560   TEST: Il suffit qu’il {{court}} plus
 11333  11561   TEST: Je veux qu’il {{finit}} son repas.
................................................................................
 11355  11583   
 11356  11584   
 11357  11585   # Malgré que + subjonctif
 11358  11586   # «Malgré que» peut être utilisé délibérément pour un parler populaire qui ignore le subjonctif.
 11359  11587   # --> pas de règle de contrôle sur ce point.
 11360  11588   
 11361  11589   __[i]/vmode(vmode_qqch_que_subjonctif2)__
 11362         -    (?:à condition|pour peu|il >  peut) +que? +({w1}) +>? *({w_2})  @@w,$
        11590  +    (?:à condition|pour peu|il +peut) +que? +({w1}) +({w_2})  @@w,$
 11363  11591       <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":", ":[GYS]") -2>> =suggVerbMode(@, ":S", \1)    # Ce verbe devrait être au subjonctif.
 11364  11592   
 11365  11593   TEST: à condition qu’il {{finit}} son boulot.
 11366  11594   TEST: pour peu qu’il {{prend}} son devoir sérieux… 
 11367  11595   TEST: il se peut que nous {{avons}} tort.
 11368  11596   
 11369  11597   
 11370  11598   # indicatif nécessaire
 11371  11599   __[i]/vmode(vmode_sujet_indicatif)__
 11372         -    ^ *(je|j’(?:en|y)|tu|ils?|elles?|on|nous|vous) +>? *({w_2})  @@*,$
        11600  +    ^ *(je|j’(?:en|y)|tu|ils?|elles?|on|nous|vous) +({w_2})  @@*,$
 11373  11601       <<- morphex(\2, ":S", ":[GIK]") and not re.search("^e(?:usse|û[mt]es|ût)", \2) 
 11374  11602       -2>> =suggVerbMode(@, ":I", \1)                                                                 # Ce verbe ne devrait pas être au subjonctif.
 11375  11603   __[i]/vmode(vmode_j_indicatif)__
 11376  11604       ^ *j’({w_2})  @@$
 11377  11605       <<- morphex(\1, ":S", ":[GIK]") and \1 != "eusse" -1>> =suggVerbMode(@, ":I", "je")             # Ce verbe ne devrait pas être au subjonctif.
 11378  11606   
 11379  11607   TEST: Il {{ait}} parti.
................................................................................
 11380  11608   TEST: Il en {{conclue}} qu’il a eu raison.
 11381  11609   TEST: j’en {{aie}} marre
 11382  11610   TEST: j’{{aie}} faim
 11383  11611   
 11384  11612   
 11385  11613   # Après que + indicatif
 11386  11614   __[i]/vmode(vmode_après_que_indicatif)__
 11387         -    après que? ({w_2}) +>? *({w_2})  @@w,$
        11615  +    après que? ({w_2}) +({w_2})  @@w,$
 11388  11616       <<- morph(\1, ":(?:Os|M)", False) and (morphex(\2, ":V.*:S", ":[GI]") or morph(\2, ":V0e.*:S", False))
 11389  11617       -2>> =suggVerbMode(@, ":I", \1)
 11390  11618       # Après « après que », le verbe ne s’emploie pas au subjonctif mais à l’indicatif, si l’action s’est déroulée de façon certaine.
 11391  11619   
 11392  11620   TEST: Après qu’il {{ait}} allé
 11393  11621   TEST: Après que Paul {{ait}} mangé son repas.
 11394  11622   TEST: Après qu’il {{soit}} parti, il plut.