Grammalecte  Check-in [702c4c02f1]

Overview
Comment:[fr] ajustements
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: 702c4c02f1fb3f78d5f2b2fe9426e700184b658d36d73d6865f33cd2029888a5
User & Date: olr on 2019-08-27 06:21:11
Other Links: manifest | tags
Context
2019-08-27
08:04
[build][core][fr] function change_meta(), +ajustements check-in: 8b4efd4241 user: olr tags: build, core, fr, trunk
06:21
[fr] ajustements check-in: 702c4c02f1 user: olr tags: fr, trunk
2019-08-26
10:44
[fr] da: noms/verbes check-in: 40f621dc1e user: olr tags: fr, trunk
Changes

Modified gc_lang/fr/rules.grx from [cdc8a36428] to [ab4b2094bc].

  1361   1361   
  1362   1362   !!
  1363   1363   !!
  1364   1364   !!!! Dates                                                                                        !!
  1365   1365   !!
  1366   1366   !!
  1367   1367   __[i]/date(date_nombres)__
  1368         -    (?<!\d[ /.-])(\d\d?)([ /.-])(\d\d?)([ /.-])(\d\d\d+)(?![ /.-]\d)  @@0,*,w,**,$
  1369         -    <<- \2 == \4 and not checkDate(\1, \3, \5) and not before("(?i)\\b(?:version|article)s? +$") ->> _                       # Cette date est invalide.
  1370         -    <<- ~>> =\0.replace(".", "-").replace(" ", "-").replace(r"\/", "-")
         1368  +    (?<!\d[ ./-])(\d\d?)([ ./-])(\d\d?)([ ./-])(\d\d\d+)(?![ ./-]\d)  @@0,*,w,**,$
         1369  +    <<- \2 == \4 and not checkDate(\1, \3, \5) and not before("(?i)\\b(?:version|article|référence)s? +$") ->> _                       # Cette date est invalide.
         1370  +    <<- ~>> \1-\3-\5
  1371   1371   
  1372   1372   TEST: le {{29 02 2011}}
  1373   1373   TEST: le {{40-02-2011}}
  1374   1374   TEST: le {{32.03.2018}}
  1375   1375   TEST: le {{81/01/2012}}
  1376   1376   TEST: 12-12-2012
  1377   1377   TEST: Articles 32.17-918 et 98.17-761
         1378  +TEST: 03/07/2019 SANTÉ
  1378   1379   
  1379   1380   
  1380   1381   !!
  1381   1382   !!
  1382   1383   !!!! Redondances                                                                                  !!
  1383   1384   !!
  1384   1385   !!
................................................................................
  3619   3620   
  3620   3621   TEST: le {{31 avril}}
  3621   3622   TEST: le {{30 février}}
  3622   3623   TEST: {{29 février 2011}}
  3623   3624   
  3624   3625   
  3625   3626   __date_journée_jour_mois_année__
         3627  +    *NUM - *NUM - ~^\d{2,5}$
         3628  +        <<- \1.isdigit() and \2.isdigit() ~>> ␣
         3629  +
  3626   3630       ([lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche])  ?,¿  ?le¿  (~^\d\d?$) - (~^\d\d?$) - (~^\d{2,5}$)
         3631  +        <<- /date/ not after("^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(\1, \2, \3, \4)
         3632  +        -1>> =getDay(\2, \3, \4)
         3633  +        # Le jour de la date suivante est incorrect (selon le calendrier grégorien).|https://fr.wikipedia.org/wiki/Passage_du_calendrier_julien_au_calendrier_gr%C3%A9gorien
         3634  +
  3627   3635       ([lundi|mardi|mercredi|jeudi|vendredi|samedi|dimanche])  ?,¿  ?le¿  (~^\d\d?$)  ([janvier|février|mars|avril|mai|juin|juillet|aout|août|septembre|octobre|novembre|décembre])  (~^\d{2,5}$)
  3628   3636           <<- /date/ not after("^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(\1, \2, \3, \4)
  3629   3637           -1>> =getDay(\2, \3, \4)
  3630   3638           # Le jour de la date suivante est incorrect (selon le calendrier grégorien).|https://fr.wikipedia.org/wiki/Passage_du_calendrier_julien_au_calendrier_gr%C3%A9gorien
  3631   3639   
  3632   3640   TEST: {{samedi}}, le 10-06-2014                                           ->> mardi
  3633   3641   TEST: {{lundi}} le 23-07-2019
................................................................................
 12291  12299   #<end>
 12292  12300   #@:[VR]¬[NAP]
 12293  12301   #, @¬:[NA]
 12294  12302   #[ne|n’|me|m’|te|t’|se|s’|le|la|l’|les|leur|leur|mon|ma|ta|sa|notre|votre|mes|tes|ses|ce|cet|cette|ces|je|j’|tu|il|on|nous|vous|ils|ça|ceci|cela|c’|ç’|chaque]
 12295  12303   
 12296  12304   
 12297  12305   __simplication_substantifs__
        12306  +    >acte [de|d’] [baptême|caution|cautionnement|cession|contrition|licitation|mariage|naissance|notoriété|propriété|quittance|reconnaissance|répudiation|vente]
        12307  +    >acte d’ [achat|engagement]
        12308  +    >acte de gestion ?courante¿
        12309  +    >acte de procédure ?pénale¿
        12310  +    >acte d’ état ?civil¿
 12298  12311       >administratrice >système
 12299  12312       >agence de >voyage
 12300  12313       >aire d’ atterrissage
 12301  12314       >animal [de|d’] compagnie
 12302  12315       >appel au secours
 12303  12316       >arc à poulies
 12304  12317       >arme à feu
................................................................................
 12331  12344       [>boîte|>boite] [aux|à] lettres
 12332  12345       [>boîte|>boite] à [gants|outils|sardines]
 12333  12346       >bombe à [eau|fission|fusion|fragmentation|hydrogène|neutrons|retardement]
 12334  12347       >bombe à rayonnement renforcé
 12335  12348       >bonnet [de|d’] nuit
 12336  12349       >bonne à rien
 12337  12350       >boucle d’ >oreille
        12351  +    bras d’ honneur
 12338  12352       >brave ?d’¿ entre les braves
 12339  12353       >brosse à [>dent|reluire]
 12340  12354       >cabinet [de|d’] [toilette|travail]
 12341  12355       >camp [de|d’] [concentration|internement|rééducation]
 12342  12356       >canne à [pêche|sucre]
 12343  12357       >caisse à >outil
 12344  12358       >carton d’ emballage
................................................................................
 12448  12462       >hôtesse d’ accueil
 12449  12463       >garde à vue
 12450  12464       >garde du corps
 12451  12465       gaz à >effet [de|d’] serre
 12452  12466       >grain [de|d’] [blé|maïs|sable]
 12453  12467       >infirmière [de|d’] garde
 12454  12468       >inspection [de|d’] routine
        12469  +    >interface [utilisateur+s]
 12455  12470       >invitée d’ honneur
 12456  12471       >invitée surprise
 12457  12472       >journal [de|d’] bord
 12458  12473       >juge d’ instruction
 12459  12474       >lame de fond
 12460  12475       >lettre [de|d’] recommandation
 12461  12476       >lampe à [huile|pétrole]
................................................................................
 13304  13319   __da_substantifs__
 13305  13320       [<start>|,]  $:D  *WORD  *WORD  [ne|n’|me|m’|te|t’|se|s’]
 13306  13321       [<start>|,]  $:D  *WORD  *WORD  [le|la|l’|les|en|nous|vous|lui|leur|y]  @:(?:[123][sp]|P)
 13307  13322       [<start>|,]  $:D  *WORD  *WORD  [nous|vous]     [le|la|l’|les|en|y]     @:(?:[123][sp]|P)
 13308  13323       [<start>|,]  $:D  *WORD  *WORD  [le|la|l’|les]  [lui|leur|en|y]         @:(?:[123][sp]|P)
 13309  13324       [<start>|,]  $:D  *WORD  *WORD  [lui|leur|y]    en                      @:(?:[123][sp]|P)
 13310  13325       [<start>|,]  $:D  *WORD  *WORD  @:(?:3[sp]|P)
 13311         -        <<- morph(\3, ":[NA]", ":G") and morph(\4, ":[NA]", ":[PG]") =>> exclude(\4, ":V")
        13326  +        <<- morph(\3, ":[NA]", ":(?:G|V0)") and morph(\4, ":[NA]", ":[PG]") =>> exclude(\4, ":V")
 13312  13327   
 13313  13328       [des|ces|mes|tes|ses|nos|vos|quelques|lesdits]  @:A.*:[pi]  @:N.*:[pi]¬(?:3[sp]|G)
 13314  13329           <<- =>> exclude(\3, ":V")
 13315  13330   
 13316  13331       les  @:A.*:[pi]¬:V  @:N.*:[pi]¬(?:3[sp]|G)
 13317  13332           <<- not before(":O[vs]") =>> exclude(\3, ":V")
 13318  13333   
................................................................................
 13844  13859   TEST: à la Richard Nixon Foundation
 13845  13860   TEST: à ne plus se laisser faire la fois d’après
 13846  13861   TEST: il pense à la fois où nous avons eu cet accident idiot.
 13847  13862   
 13848  13863   
 13849  13864   __gn_la_2m__
 13850  13865       la  *WORD  *WORD
 13851         -        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        13866  +        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 13852  13867           <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
 13853  13868           -3>> =suggFemSing(\3, True)                                                         # Accord de genre erroné : « \1 \2 » est féminin, « \3 » est masculin.
 13854  13869           <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
 13855  13870           -3>> =suggFemSing(\3)                                                               # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.
 13856  13871   
 13857         -    [et|ou|de]  la  *WORD  *WORD
        13872  +    [et|ou|de|d’]  la  *WORD  *WORD
 13858  13873           <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
 13859  13874           <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
 13860  13875           -4>> =suggFemSing(\4, True)                                                         # Accord de genre erroné : « \2 \3 » est féminin, « \4 » est masculin.
 13861  13876           <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
 13862  13877           -4>> =suggFemSing(\4)                                                               # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
 13863  13878   
 13864  13879   TEST: La plus grande {{cinglé}}.
................................................................................
 13885  13900   TEST: J’en ai assez de {{leur}} {{délires}}
 13886  13901   TEST: {{Leur}} {{perceptions}} des choses m’exaspère.
 13887  13902   TEST: dans {{leur}} {{usines}}
 13888  13903   
 13889  13904   
 13890  13905   __gn_leur_2m__
 13891  13906       leur  *WORD  *WORD
 13892         -        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        13907  +        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 13893  13908           <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
 13894  13909               and not apposition(\2, \3)
 13895  13910           -3>> =switchGender(\3, False)                                                       # Accord de genre erroné entre « \2 » et « \3 ».
 13896  13911           <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, False)                  # Accord de genre erroné avec « \3 ».
 13897  13912           <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
 13898  13913           -3>> =suggSing(\3)                                                                  # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.
 13899  13914           <<- /gn/ __also__ and morph(\2, ":[NA].*:i") -1>> leurs                             # Accord de nombre erroné avec « \2 \3 ».
 13900  13915   
 13901         -    [et|ou|de]  leur  *WORD  *WORD
        13916  +    [et|ou|de|d’]  leur  *WORD  *WORD
 13902  13917           <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
 13903  13918           <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
 13904  13919               and not apposition(\3, \4)
 13905  13920           -4>> =switchGender(\4, False)                                                       # Accord de genre erroné entre « \3 » et « \4 ».
 13906  13921           <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, False)                  # Accord de genre erroné avec « \4 ».
 13907  13922           <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
 13908  13923           -4>> =suggSing(\4)                                                                  # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
................................................................................
 14154  14169   TEST: Téléphone {{au}} personne qui ont donné leur accord.
 14155  14170   TEST: téléphone {{au}} {{boulangère}}
 14156  14171   TEST: au chien, au chat, au poulet
 14157  14172   TEST: à partir de pièces détachées, au départ entièrement venues de l’étranger puis en partie fabriquées sur place
 14158  14173   
 14159  14174   
 14160  14175   __gn_det_mas_sing_2m__
 14161         -    [ce|cet|quel|au|ledit|dudit|audit]  *WORD  *WORD
        14176  +    [ce|cet|quel|au|ledit|dudit|audit|aucun|nul]  *WORD  *WORD
 14162  14177           <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 14163  14178           <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
 14164  14179           -3>> =suggMasSing(\3, True)                                                         # Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
 14165  14180           <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
 14166  14181           -3>> =suggMasSing(\3)                                                               # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.
 14167  14182   
 14168         -    [et|ou|de]  [ce|cet|quel|au|ledit|dudit|audit]  *WORD  *WORD
        14183  +    [et|ou|de|d’]  [ce|cet|quel|au|ledit|dudit|audit|aucun|nul]  *WORD  *WORD
 14169  14184           <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
 14170  14185           <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
 14171  14186           -4>> =suggMasSing(\4, True)                                                         # Accord de genre erroné : « \3 » est masculin, « \4 » est féminin.
 14172  14187           <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
 14173  14188           -4>> =suggMasSing(\4)                                                               # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
 14174  14189   
 14175  14190   TEST: cet outil {{terribles}} qu’il a dans les mains
................................................................................
 14188  14203   TEST: mon {{excellentes}} mémoire
 14189  14204   TEST: {{ton}} {{belle}} mémoire
 14190  14205   TEST: {{mon}} {{chienne}}
 14191  14206   
 14192  14207   
 14193  14208   __gn_mon_ton_son_2m__
 14194  14209       [mon|ton|son]  *WORD  *WORD
 14195         -        <<- /gn/ not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        14210  +        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 14196  14211           <<- /gn/ morph(\2, ":[NA].*:m", ":(?:B|G|e|V0|f)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
 14197  14212           -3>> =suggMasSing(\3, True)                                                         # Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
 14198  14213           <<- /gn/ morph(\2, ">[aâeéèêiîoôuûyœæ].*:[NA].*:f", ":(?:B|G|e|V0|m)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
 14199  14214           -3>> =suggFemSing(\3, True)                                                         # Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
 14200  14215           <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
 14201  14216           -3>> =suggMasSing(\3)                                                               # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.
 14202  14217   
 14203         -    [et|ou|de]  [mon|ton|son]  *WORD  *WORD
        14218  +    [et|ou|de|d’]  [mon|ton|son]  *WORD  *WORD
 14204  14219           <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
 14205  14220           <<- /gn/ morph(\3, ":[NA].*:m", ":(?:B|G|e|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
 14206  14221           -4>> =suggMasSing(\4, True)                                                         # Accord de genre erroné : « \3 » est masculin, « \4 » est féminin.
 14207  14222           <<- /gn/ morph(\3, ">[aâeéèêiîoôuûyœæ].*:[NA].*:f", ":(?:B|G|e|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
 14208  14223           -4>> =suggFemSing(\4, True)                                                         # Accord de genre erroné : « \3 » est féminin, « \4 » est masculin.
 14209  14224           <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
 14210  14225           -4>> =suggMasSing(\4)                                                               # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
................................................................................
 14227  14242   TEST: {{ma}} {{parti}}
 14228  14243   TEST: {{ma}} amour                                            ->> mon
 14229  14244   TEST: ma {{carlingues}}
 14230  14245   
 14231  14246   
 14232  14247   __gn_det_fem_sing_2m__
 14233  14248       [ma|ta|sa|cette|quelle|ladite]  *WORD  *WORD
 14234         -        <<- /gn/ not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        14249  +        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 14235  14250           <<- /gn/ morph(\2, ":[NAQ].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NAQ].*:m", "*") and not apposition(\2, \3)
 14236  14251           -3>> =suggFemSing(\3, True)                                                         # Accord de genre erroné : « \1 \2 » est féminin, « \3 » est masculin.
 14237  14252           <<- /gn/ morph(\2, ":[NAQ].*:[si]", ":G") and morph(\3, ":[NAQ].*:p", ":[GWsi]") and not apposition(\2, \3)
 14238  14253           -3>> =suggFemSing(\3)                                                               # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.
 14239  14254   
 14240         -    [et|ou|de]  [ma|ta|sa|cette|quelle|ladite]  *WORD  *WORD
        14255  +    [et|ou|de|d’]  [ma|ta|sa|cette|quelle|ladite]  *WORD  *WORD
 14241  14256           <<- /gn/ not morph(<1, ":[NAQ]|>(?:et|ou)/") and not \4.startswith("seul") >>>
 14242  14257           <<- /gn/ morph(\3, ":[NAQ].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NAQ].*:m", "*") and not apposition(\3, \4)
 14243  14258           -4>> =suggFemSing(\4, True)                                                         # Accord de genre erroné : « \3 » est féminin, « \4 » est masculin.
 14244  14259           <<- /gn/ morph(\3, ":[NAQ].*:[si]", ":G") and morph(\4, ":[NAQ].*:p", ":[GWsi]") and not apposition(\3, \4)
 14245  14260           -4>> =suggFemSing(\4)                                                               # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
 14246  14261   
 14247  14262   TEST: quelle belle {{étourdi}}, cette gamine
................................................................................
 14264  14279           -1>> quelques                                                                       # Il manque un “s” à « quelque » ou « \2 » doit être au singulier.
 14265  14280   
 14266  14281   TEST: {{Quelque}} amis
 14267  14282   
 14268  14283   
 14269  14284   __gn_det_epi_sing_2m__
 14270  14285       [chaque|quelque|notre|votre]  *WORD  *WORD
 14271         -        <<- /gn/ not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        14286  +        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 14272  14287           <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
 14273  14288               and not apposition(\2, \3)
 14274  14289           -3>> =switchGender(\3, False)                                                       # Accord de genre erroné entre « \2 » et « \3 ».
 14275  14290           <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, False)                  # Accord de genre erroné avec « \3 ».
 14276  14291           <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
 14277  14292           -3>> =suggSing(\3)                                                                  # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.
 14278  14293   
 14279         -    [et|ou|de]  [chaque|quelque|notre|votre]  *WORD  *WORD
        14294  +    [et|ou|de|d’]  [chaque|quelque|notre|votre]  *WORD  *WORD
 14280  14295           <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
 14281  14296           <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
 14282  14297               and not apposition(\3, \4)
 14283  14298           -4>> =switchGender(\4, False)                                                       # Accord de genre erroné entre « \3 » et « \4 ».
 14284  14299           <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, False)                  # Accord de genre erroné avec « \4 ».
 14285  14300           <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
 14286  14301           -4>> =suggSing(\4)                                                                  # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
................................................................................
 14330  14345   TEST: Les {{démoralisation}}.                                 ->> démoralisations
 14331  14346   TEST: dans les {{usine}}                                      ->> usines
 14332  14347   TEST: tels que les décrit Macron
 14333  14348   
 14334  14349   
 14335  14350   __gn_les_2m__
 14336  14351       les  *WORD  *WORD
 14337         -        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        14352  +        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 14338  14353           <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
 14339  14354               and not apposition(\2, \3)
 14340  14355           -3>> =switchGender(\3, True)                                                                # Accord de genre erroné entre « \2 » et « \3 ».
 14341  14356           <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, True)                           # Accord de genre erroné avec « \3 ».
 14342  14357           <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
 14343  14358           -3>> =suggPlur(\3)                                                                          # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
 14344  14359   
................................................................................
 14400  14415   TEST: je vais {{aux}} {{cinéma}}
 14401  14416   TEST: il l’a donné aux {{étudiant}}
 14402  14417   TEST: aux {{personne}}
 14403  14418   
 14404  14419   
 14405  14420   __gn_det_epi_plur_2m__
 14406  14421       [ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|aux|moult]  *WORD  *WORD
 14407         -        <<- /gn/ not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        14422  +        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 14408  14423           <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
 14409  14424               and not apposition(\2, \3)
 14410  14425           -3>> =switchGender(\3, True)                                                                # Accord de genre erroné entre « \2 » et « \3 ».
 14411  14426           <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, True)                           # Accord de genre erroné avec « \3 ».
 14412  14427           <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
 14413  14428           -3>> =suggPlur(\3)                                                                          # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
 14414  14429   
 14415         -    [et|ou|de]  [ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|aux|moult]  *WORD  *WORD
        14430  +    [et|ou|de|d’]  [ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|aux|moult]  *WORD  *WORD
 14416  14431           <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
 14417  14432           <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
 14418  14433               and not apposition(\3, \4)
 14419  14434           -4>> =switchGender(\4, True)                                                                # Accord de genre erroné entre « \3 » et « \4 ».
 14420  14435           <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, True)                           # Accord de genre erroné avec « \4 ».
 14421  14436           <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
 14422  14437               and not (\1.startswith("de") and value(<1, "|un|une|"))
................................................................................
 14709  14724   
 14710  14725   TEST: {{Quels}} que soient ces idiotes                        ->> Quelles
 14711  14726   TEST: {{Quels}} qu’en soient les raisons                      ->> Quelles
 14712  14727   
 14713  14728   
 14714  14729   __gn_det_mas_plur_2m__
 14715  14730       [certains|quels|lesdits|desdits|auxdits]  *WORD  *WORD
 14716         -        <<- /gn/ not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        14731  +        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 14717  14732           <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
 14718  14733           -3>> =suggMasPlur(\3, True)                                                         # Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
 14719  14734           <<- /gn/ morph(\2, ":[NA].*:[pi]", ":G") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
 14720  14735           -3>> =suggMasPlur(\3)                                                               # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
 14721  14736   
 14722         -    [et|ou|de]  [certains|quels|lesdits|desdits|auxdits]  *WORD  *WORD
        14737  +    [et|ou|de|d’]  [certains|quels|lesdits|desdits|auxdits]  *WORD  *WORD
 14723  14738           <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \3.startswith("seul") >>>
 14724  14739           <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
 14725  14740           -4>> =suggMasPlur(\4, True)                                                         # Accord de genre erroné : « \3 » est masculin, « \4 » est féminin.
 14726  14741           <<- /gn/ morph(\3, ":[NA].*:[pi]", ":G") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
 14727  14742               and not (\1.startswith("de") and value(<1, "|un|une|"))
 14728  14743           -4>> =suggMasPlur(\4)                                                               # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.
 14729  14744   
................................................................................
 14734  14749   TEST: elle se rappelle de quels rapports {{désastreuses}} il s’agit.
 14735  14750   TEST: de quels grands {{fou}} s’agit-il ?
 14736  14751   TEST: chez certains la revue Limite provoque des crises d’hystérie.
 14737  14752   
 14738  14753   
 14739  14754   __gn_det_fem_plur_2m__
 14740  14755       [certaines|quelles|lesdites|desdites|auxdites]  *WORD  *WORD
 14741         -        <<- /gn/ not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        14756  +        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
 14742  14757           <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
 14743  14758           -3>> =suggFemPlur(\3, True)                                                         # Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
 14744  14759           <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
 14745  14760           -3>> =suggFemPlur(\3)                                                               # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
 14746  14761   
 14747         -    [et|ou|de]  [certaines|quelles|lesdites|desdites|auxdites]  *WORD  *WORD
        14762  +    [et|ou|de|d’]  [certaines|quelles|lesdites|desdites|auxdites]  *WORD  *WORD
 14748  14763           <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
 14749  14764           <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
 14750  14765           -4>> =suggFemPlur(\4, True)                                                         # Accord de genre erroné : « \3 » est féminin, « \4 » est masculin.
 14751  14766           <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
 14752  14767               and not (\1.startswith("de") and value(<1, "|un|une|"))
 14753  14768           -4>> =suggFemPlur(\4)                                                               # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.
 14754  14769   
................................................................................
 23331  23346   TEST: Quel est le problème ? Je ne fais que ramener Paul à la raison.
 23332  23347   TEST: La voir se fêler ainsi lui noua la gorge.
 23333  23348   TEST: Quoi de neuf, mec ?
 23334  23349   TEST: T’as enfin trouvé des gens avec qui t’entendre ?
 23335  23350   TEST: ça fait du bien de se l’entendre dire
 23336  23351   TEST: Laisse tomber, mec ! Pour qui tu te prends ?
 23337  23352   TEST: il y avait souvent foule
 23338         -TEST: 03/07/2019 SANTÉ
 23339  23353   
 23340  23354   
 23341  23355   
 23342  23356   !!! Tests historiques                                                                             !!
 23343  23357   
 23344  23358   ## Version 0.5.14
 23345  23359   TEST: par le léger tissu de rayonne qui les protégeait en ce moment.