Grammalecte  Check-in [247bdef473]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:merge trunk
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | tbme
Files: files | file ages | folders
SHA3-256:247bdef4738c5581291ba4d5a32a989b68e57e705a6a79648063bdca6b384466
User & Date: olr 2019-09-01 08:33:02
Context
2019-09-01
12:27
[build][tb][js] update builder for Thunderbird 68+ check-in: 8c9d754624 user: olr tags: build, tb, tbme
08:33
merge trunk check-in: 247bdef473 user: olr tags: tbme
08:22
[graphspell] tokenizer: handles all kinds of apostrophes check-in: 1bdedd3133 user: olr tags: graphspell, trunk
2019-08-29
09:19
merge trunk check-in: 44de2cad94 user: olr tags: tbme
Changes

Changes to gc_lang/fr/data/phonet_simil.txt.

744
745
746
747
748
749
750

751
752
753
754
755
756
757
survie survies survis survit
survol survols survole survoles survolent
suspens suspends suspend
syndic syndics syndique syndiques syndiquent
syndicat syndicats syndiqua syndiquas
ta tas
tache taches tâche tâches tâchent

taie taies tes thé thés tais tait
tain teint teints thym thyms tin tins tint teins
taira tairas terra terras
taire ter terre terres terrent
taise taises taisent thèse thèses
tant temps tends tend taon taons
tante tantes tente tentes tentent







>







744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
survie survies survis survit
survol survols survole survoles survolent
suspens suspends suspend
syndic syndics syndique syndiques syndiquent
syndicat syndicats syndiqua syndiquas
ta tas
tache taches tâche tâches tâchent
taf tafs taffe taffes taffent
taie taies tes thé thés tais tait
tain teint teints thym thyms tin tins tint teins
taira tairas terra terras
taire ter terre terres terrent
taise taises taisent thèse thèses
tant temps tends tend taon taons
tante tantes tente tentes tentent

Changes to gc_lang/fr/rules.grx.

1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
....
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
....
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
....
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
....
2127
2128
2129
2130
2131
2132
2133




2134
2135
2136
2137
2138
2139
2140
....
2147
2148
2149
2150
2151
2152
2153




2154
2155
2156
2157
2158
2159
2160
....
2234
2235
2236
2237
2238
2239
2240






















2241
2242
2243
2244
2245
2246
2247
....
3613
3614
3615
3616
3617
3618
3619




















3620
3621
3622
3623
3624
3625
3626
....
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
....
3681
3682
3683
3684
3685
3686
3687

3688
3689
3690
3691
3692
3693
3694
....
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
....
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924

5925
5926
5927
5928
5929
5930
5931
....
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
....
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
.....
10832
10833
10834
10835
10836
10837
10838

10839
10840
10841
10842
10843
10844
10845
.....
11098
11099
11100
11101
11102
11103
11104

11105
11106
11107
11108
11109
11110
11111
.....
12395
12396
12397
12398
12399
12400
12401

12402
12403
12404
12405
12406
12407
12408
.....
12701
12702
12703
12704
12705
12706
12707
12708
12709
12710
12711
12712
12713
12714
12715
.....
13391
13392
13393
13394
13395
13396
13397

13398
13399
13400
13401
13402
13403
13404
.....
13428
13429
13430
13431
13432
13433
13434

13435
13436
13437
13438
13439
13440
13441
.....
13695
13696
13697
13698
13699
13700
13701



13702
13703
13704
13705
13706
13707
13708
.....
14629
14630
14631
14632
14633
14634
14635
14636
14637
14638
14639
14640
14641
14642
14643
.....
14823
14824
14825
14826
14827
14828
14829
14830
14831
14832
14833
14834
14835
14836
14837
14838
14839
14840
14841
14842
14843
14844
14845
14846
14847
14848
14849
14850
14851
14852
14853

14854
14855
14856
14857
14858
14859
14860
.....
17920
17921
17922
17923
17924
17925
17926

17927
17928
17929
17930
17931
17932
17933
.....
17948
17949
17950
17951
17952
17953
17954
17955
17956
17957
17958


17959
17960
17961
17962


17963
17964



17965
17966
17967




17968
17969
17970
17971
17972
17973

17974
17975

17976

17977
17978
17979
17980
17981
17982
17983
17984
17985
.....
17997
17998
17999
18000
18001
18002
18003
18004
18005
18006
18007
18008
18009
18010
18011
.....
18035
18036
18037
18038
18039
18040
18041

18042
18043
18044
18045
18046
18047
18048
.....
18948
18949
18950
18951
18952
18953
18954
18955
18956
18957
18958
18959
18960
18961
18962
.....
18969
18970
18971
18972
18973
18974
18975

18976
18977
18978
18979
18980
18981
18982
.....
19596
19597
19598
19599
19600
19601
19602
19603
19604
19605
19606
19607
19608
19609
19610
.....
19611
19612
19613
19614
19615
19616
19617
19618
19619
19620
19621
19622
19623
19624
19625
.....
19626
19627
19628
19629
19630
19631
19632
19633
19634
19635
19636
19637
19638
19639
19640
.....
19642
19643
19644
19645
19646
19647
19648
19649
19650
19651
19652
19653
19654
19655
19656
.....
19676
19677
19678
19679
19680
19681
19682

19683
19684
19685
19686
19687
19688
19689
.....
23400
23401
23402
23403
23404
23405
23406

23407
23408
23409
23410
23411
23412
23413
    [nN][fF][  -]?(?:c|C|e|E|p|P|q|Q|s|S|x|X|z|Z|[eE][nN](?:[  -][iI][sS][oO]|))[  -]?[0-9]+(?:[/ ‑-][0-9]+|)
    <<- not re.search("^NF (?:C|E|P|Q|S|X|Z|EN(?: ISO|)) [0-9]+(?:‑[0-9]+|)", \0)
    ->> =formatNF(\0)                                       # Norme française. Utilisez les espaces et tirets insécables.|http://fr.wikipedia.org/wiki/Liste_de_normes_NF

TEST: __nf__ Norme française : {{Nf-EN ISO 3892-23}}


## Chimie
__[s]/chim(chim_molécules)__
    (?:Ca(?:CO3|SO4)|CO2|(?:H2|Na2)(?:CO3|O|SO4)|[HNO]2|HNO3|Fe2O3|KMnO4|NO2|SiO2|SO[23])
    <<- ->> =\0.replace("2", "₂").replace("3", "₃").replace("4", "₄")                               # Typographie des composés chimiques. [!]

TEST: __chim__ les molécules {{CaCO3}} et {{H2O}}…


!!
!!
!!!! Cohérence des guillemets                                                                     !!
!!
!!

................................................................................
TEST: Assis, gronde{{-t -}}elle                         ->> -t-
TEST: vient-il demain ?
TEST: prend-elle l’avantage ?
TEST: saura-t-on jamais la vérité ?
TEST: arrive-t-elle ce matin ?
TEST: y aura-t-il du poulet au dîner ?


!!!! Élisions                                                                                     !!

# presque : élision
__[i>/typo(typo_presque)__
    (presqu[’'])(?![îi]le)  @@0
        <<- -1>> "presque "                                             # Pas d’élision autorisée sur “presque”, sauf avec “presqu’île”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745

TEST: {{Presqu’}}exclusivement bâtie en pierre.
TEST: C’est une presqu’île.
TEST: Cette presqu’ile est particulièrement venteuse.


# quelque : élision
__[i>/typo(typo_quelque)__
    (quelqu[’'])(?!une?)  @@0
        <<- -1>> "quelque "                                             # Pas d’élision autorisée sur “quelque”, sauf avec “quelqu’un” ou “quelqu’une”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745

TEST: {{Quelqu’}}absurde que ce soit, il faut y céder.
TEST: quelqu’un vient.
TEST: elle s’en est allée avec quelqu’une…



@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: purge_tag_disambiguate                                                                  _
................................................................................
    [le|la|l’|les]  [lui|leur|en]      @:¬:[OXW]
    leur            en                 @:¬:[OXW]
        <<- =>> select(\2, ":(?:[123][sp]|P|Y)")

    $:M  @:[123]s¬:[QW]
        <<- \2.islower() and morph(<1, ":Cs|<start>") =>> select(\2, ":[123][sp]")

    <start> $:M  @:(?:[123]s|Oo)|>ne/¬:A
        <<- =>> =select(\2, ":M")

    [que|qu’|combien|pourquoi|qui|quand|où]  ?[en|y]¿  *WORD
        <<- =>> exclude(\-1, ":E")

    [<start>|,]  quelqu’un  *WORD
        <<- =>> exclude(\3, ":N")

    >falloir [>pouvoir|>savoir|>vouloir|>manger|>conseiller]
        <<- =>> exclude(\2, ":N")


__da_été__
    >avoir été
................................................................................
    l’ [un|une]  *WORD
        <<- not value(\3, "|plus|") =>> select(\3, ":[123][sp]")

    [des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune]  *WORD
        <<- =>> exclude(\2, ":V")

    [un|une]  *WORD
        <<- not value(<1, "|l’|") and not value(\2, "|a|fut|fût|est|") and not morph(\2, ":P") =>> exclude(\2, ":V")

    [une|le|la|les|des|chaque|quelque|quelques|cet|cette|ces|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs] personne
        <<- =>> select(\-1, ":N")

    de  [la|l’]  $:¬:Y
        <<- not value(<1, "|semblant|") =>> exclude(\3, ":V")

................................................................................
        <<- morph(\-1, ":[NA]") ~1:3>> ␣

    alors    [que|qu’]
    dès lors [que|qu’]
        <<- ~>> ␣
        <<- =>> define(\1, [":Cs"])






__fusions_noms_communs__
    au revoir
        <<- ~>> ␣
        <<- =>> define(\1, [":N:m:i"])

    n’ importe [qui|quoi|quel|quelle|quels|quelles|où]
................................................................................
    black [>bloc|>block]
    machine [learning+s]
    nec plus ultra
    standing >ovation
    star [system+s]
        <<- ~>> ␣





    *NUM : *NUM
        <<- space_after(\1, 0, 0) and space_after(\1, 0, 0) ~>> ␣

    *NUM  ~^h[0-9][0-9]$
        <<- space_after(\1, 0, 0) ~>> ␣


................................................................................
!!!! Noms composés                                                                                !!

__tag_noms__
    ~\w-là$
        <<- />> -là
        <<- =>> =define_from(\1, 0, -3)

























!!
!!
!!!! Verbes composés                                                                              !!
!!
!!
................................................................................
TEST: le {{VIième}} siècle                      ->> VIᵉ
TEST: Le {{XX ème}} siècle.                     ->> XXᵉ
TEST: Le {{XXIème}} siècle.                     ->> XXIᵉ
TEST: le {{XXè}} siècle.                        ->> XXᵉ
TEST: les {{CXIèmes}}                           ->> CXIᵉˢ























!!!! Dates                                                                                        !!

__fusion_date__
    *NUM  -  ~^\d\d?$  -  ~^\d{2,5}$
        <<- \1.isdigit() ~>> ␣
        <<- =>> change_meta(\1, "DATE")
................................................................................
!!!! Traits d’union                                                                               !!
!!
!!

### ce / cet / cette / ces + nom + là
__tu_ce_cette_ces_nom_là_ci__
    [ce|cet|cette|ces] *WORD [là|ci]
        <<- /tu/ morph(\2, ":[NB]") and not value(>1, "|où|") -2:3>> \2-là      # Il manque probablement un trait d’union.

    [ce|cet|cette|ces] *WORD la [<end>|,]
        <<- /tu/ morph(\2, ":[NB]") -2:3>> \2-là                                # Il manque probablement un trait d’union.

    [ce|cet|cette|ces] *WORD si [<end>|,]
        <<- /tu/ morph(\2, ":[NB]") -2:3>> \2-ci                                # Il manque probablement un trait d’union.

................................................................................
TEST: à ce {{moment là}}                                                        ->> moment-là
TEST: Il faisait froid cet {{hiver la}}.                                        ->> hiver-là
TEST: Ces {{trois là}} sont incollables.
TEST: Je connais bien cette {{sensation là}}.
TEST: Cette {{voiture si}}, c’est celle-là que je veux.
TEST: ce que je veux c’est ce {{véhicule ci}}
TEST: Laisse ce chiot là où il est !



### Préfixes
__tu_préfixe_ex__
    ex  $:N¬*
        <<- /tu/ not value(\2, "|aequo|nihilo|cathedra|absurdo|abrupto|")
        ->> ex-\2                                                           # S’il s’agit d’un seul mot, il manque un trait d’union.
................................................................................
        <<- /conf/ not \3.istitle() and not value(<1, "|plus|moins|")
        -3>> =suggSimil(\3, ":[NA]", True)                                                          # Incohérence avec “\1\2” : “\3” est une forme verbale conjuguée.

TEST: d’une {{habille}} de femme
TEST: plus d’un ont été traumatisés
TEST: Plus d’une sont parties aussi vite qu’elles étaient venues


__conf_dès_vconj__
    dès  ?[le|la|l’|les]¿  @:[123][sp]¬:[GNA]
        <<- /conf/ not \-1.istitle() --1>> =suggSimil(\-1, ":[NA]", True)                           # Incohérence avec “\1” : “\-1” est une forme verbale conjuguée.

TEST: dès le {{commencent}}, j’ai vu le problème.



__conf_par_vconj__
    par  ?[le|la|l’|les]¿  @:[123][sp]¬:[GNA]
        <<- /conf/ not \-1.istitle() --1>> =suggSimil(\-1, ":[NA]", True)                           # Incohérence avec “\1” : “\-1” est une forme verbale conjuguée.

    par  [un|une]  @:[123][sp]¬:[GNA]
        <<- /conf/ not \3.istitle() and not value(<1, "|plus|moins|un|une|")
................................................................................
TEST: à leur {{profile}}
TEST: une référence à l’astuce de base qui permet d’outrepasser ses droits.
TEST: Le mari répète à l’envi qu’il a découvert la France à travers les mots de sa femme.
TEST: Il reste de nombreux militants sincères à la FI.


    [malgré|dès] [le|la|l’|les|leur|leurs]  @:V¬:[GNAWMB]
        <<- /conf/ -3>> =suggSimil(\3, ":[NA]", True)                           # Incohérence : après “\1”, on devrait trouver un groupe nominal.

TEST: malgré l’{{arrête}} qui interdisait le port

TEST: malgré les deux précédentes erreurs


__conf_préverbes__
    ne n’
        <<- /conf/ not \1.isupper() ->> ne m’|n’                        # Incohérence. Double négation.

................................................................................
TEST: Qu’elle avait été accueillie avec joie.


__conf_quelle_qu_elle__
    quelle  [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y]
        <<- /conf/ not (value(\2, "|en|ne|")  and morph(>1, ":V0e")) -1>> qu’elle                   # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”.

    quelle  @:V¬:[NA].*:[fe]|>(?:être|plus)/
        <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|"))
        -1>> qu’elle                                                                                # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”.

TEST: {{Quelle}} y vienne, on verra ce qu’elle vaut.
TEST: {{Quelle}} a du répondant, cette gamine !
TEST: {{Quelle}} partit prendre son repas à la cantine, je n’en avais cure.
TEST: Il se plaint {{quelle}} ne nous dit rien.
................................................................................
TEST: {{Quelle}} l’apprenne un jour, on n’y peut rien.
TEST: Je crois {{quelle}} n’en sait pas assez pour nous nuire.


    quelles [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y]
        <<- /conf/ not (value(\2, "|en|ne|") and morph(>1, ":V0e")) -1>> qu’elles                   # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”.

    quelles @:V¬:[NA].*:[fe]|>(?:être|plus)/
        <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|"))
        -1>> qu’elles                                                                               # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”.

TEST: Je veux {{quelles}} s’efforcent à y parvenir.
TEST: {{Quelles}} t’arrivent seulement à la cheville, voilà qui serait étonnant.
TEST: {{Quelles}} m’engueulent encore une seule fois et elles vont le regretter.
TEST: {{Quelles}} viennent et qu’on en finisse.
................................................................................
    à l’ occasion
    à l’ ordre du jour
    à l’ un d’ entre eux
    à l’ unanimité
    à l’ unisson
    à l’ une d’ entre elles
    à l’ échelle [nationale|mondiale|régionale|départementale|cantonale|locale|galactique|universelle]

    à l’ évidence
    à l’ œil nu
    à l’ [un|une] des leurs
    à la [bourre|con|coule|dérobée|diable|fois|leur|manque|mords-moi-le-nœud|papa|ramasse|renverse|redresse|rescousse|sauvette|volée]
    à la bonne franquette
    à la limite du supportable
    à la lumière de tout [ceci|cela|ça]
................................................................................
    comme bon [me|te|lui|leur|nous|vous] semble
    comme au bon vieux temps
    comme cul et chemise
    comme [frappé|frappée|frappés|frappées] par la foudre
    comme n’ importe où ?ailleurs¿
    comme par [enchantement|magie]
    comme par un fait exprès

    comme peau de chagrin
    comme promis
    comme qui dirait
    comme si [de|d’] rien n’ était
    contrairement aux apparences
    contre mauvaise fortune ?,¿ bon cœur
    contre nature
................................................................................
    >chasse à l’ homme
    >chasse d’ eau
    >chasseuse [de|d’] primes
    >chemin [de|d’] [traverse|fer]
    >chemise sans >manche
    >chèque sans provision
    >chili con carne

    >claire comme [de|d’] l’ eau [de|d’] [boudin|roche|source]
    >claire comme du cristal
    >claire comme jus [de|d’] [boudin|>chaussette|chique]
    [>clé|>clef] à molette
    >clin d’ œil
    >code [de|d’] bonne conduite
    >commise d’ office
................................................................................
    blond   [argenté|platine]
    gris    [acier|anthracite|argenté|fer|perle|souris]
    jaune   [canari|citron|doré|maïs|paille|sable]
    noir    [de|d’] [encre|jais]
    noir    et blanc
    noir    sur blanc
    rose    [bonbon|chair|corail]
    rouge   [anglais|brique|cardinal|carmin|cerise|coquelicot|écarlate|feu|fraise|grenat|groseille|incarnat|indien|rubis|sang|sanguin|tomate|vermeille|vermillon]
    vert    [bouteille|céladon|émeraude|épinard|impérial|lichen|olive|perroquet|pistache|poireau|pomme|prairie|printemps|sapin|sauge|tilleul]
    couleur sable
        <<- morph(<1, ":[NA]", ":D") ~>> *
        <<- __else__ and morph(<1, ":D|>(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)") ~>> ␣
        <<- __also__ =>> define(\1, [":A:e:i"])


................................................................................
    >faire amende honorable
    >faire bande à part
    >faire bon accueil
    >faire bonne figure
    >faire chou blanc
    >faire copain copain
    >faire de [mon|ton|son|notre|votre|leur] mieux

    >faire front commun
    >faire grise mine
    >faire grand [bruit|cas]
    >faire ?[bonne|excellente|grande|mauvaise]¿ impression
    >faire long feu
    >faire [machine|marche] arrière
    >faire main basse
................................................................................
    [>mettre|>remettre] l’ [écart|épreuve]
    [>mettre|>remettre] au [point|pas]
    [>mettre|>remettre] en [avant|branle|bouche|demeure|garde|jeu|lumière|mouvement|œuvre|place|scène|terre]
    [>mettre|>remettre] de côté
    >mourir jeune
    [>naître|>naitre] de la dernière pluie
    [>naître|>naitre] sous x

    >partir en vrille
    >percer à jour
    >perdre [connaissance|conscience|patience|raison]
    >perdre d’ avance
    >piquer au vif
    >porter [assistance|atteinte|bonheur|caution|chance|malheur|plainte|préjudice|secours]
    >poser problème
................................................................................
TEST: Ce qui rend les pompes à chaleur moins rentables.
TEST: l’accusation de lynchage médiatique proférée par François de Clermont à l’encontre de “Marianne” ne tient pas.
TEST: La poïesis, en grec, est ce qui permet de faire passer n’importe quoi du non-être à l’être
TEST: un moteur nouvelle génération
TEST: La première est la critique dite artiste
TEST: la critique conduit nombre de protestataires à se replier sur des modalités de défense efficaces dans le passé mais désormais largement inadaptées
TEST: Tu crois que Microsoft peut contraindre les projets libres à quoi que ce soit ?





@@@@
@@@@
@@@@
@@@@
@@@@END_GRAPH                                                                                      _
................................................................................
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemSing(\2, True)     # Accord de genre erroné : « \1 » est féminin.

TEST: {{Quelle}} homme.                                       ->> Quel
TEST: {{Quelle}} {{folles}}
TEST: {{Quelle}} {{chien}}
TEST: {{Quelle}} {{chats}}
TEST: Quelle sale journée…


__gn_quelles_1m!8__
    quelles  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m:s", ":(?:V0|Oo|[NA].*:[fe]:[pi])")        -1>> quel                       # Accord de genre et de nombre erroné. « \2 » est masculin et au singulier.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemPlur(\2, True)     # Accord de genre et de nombre erroné : « \1 » est féminin et au pluriel.
        <<- /gn/ morph(\2, ":[NA].*:f:s", ":(?:V0|Oo|[NA].*:[fe]:[pi])")        -1>> quelle                     # Accord de nombre erroné : « \2 » est au singulier.
        <<- /gn/ __also__                                                       -2>> =suggPlur(\2)              # Accord de nombre erroné : « \1 » est au pluriel.
................................................................................
TEST: les quelque 2,5 millions d’habitants
TEST: les quelque 12 000 stations-service


## Nombres
__gn_nombre_lettres_1m__
    $:B:e:p  *WORD
        <<- /gn/ not value(\1, "|neuf|mille|") and ( (morph(\2, ":[NA].*:s", "*") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL) and not re.search("^[IVXLDM]+$", \1)
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    neuf  *WORD
        <<- /gn/ ( morph(\2, ":[NA].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    mille  *WORD
        <<- /gn/ (morph(\2, ":[NA].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|")
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS.        ->> idiots
TEST: Il a abandonné neuf {{enfant}}.                                               ->> enfants
TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts.              ->> travailleurs
TEST: Il y a quatre cents {{mot}} dans la phrase.                                   ->> mots
TEST: cent {{mot}}                                                                  ->> mots
TEST: cinquante {{mot}}                                                             ->> mots
TEST: mille cinquante {{mot}}                                                       ->> mots
TEST: deux {{tête}}                                                                 ->> têtes
TEST: un logement neuf bâti par des professionnels.
TEST: un mille marin.
TEST: L’article VII mentionné dans la revue



__gn_nombre_chiffres_1m__
    [0|1|01]  @:[NAQ].*:p¬*
        <<- /gn/ space_after(\1, 1, 1) and not value(\2, "|Rois|Corinthiens|Thessaloniciens|")
        -2>> =suggSing(\2)                                                                  # Accord de nombre erroné : « \1 » devrait être au singulier.

................................................................................
TEST: l’idée consiste à la lui donner sans contrepartie et voir ce qu’il en fera.
TEST: à leur plus grand fils, ils ont offert une voiture.
TEST: ça va d’autonome à hautement dépendant
TEST: à lui donner trop d’importance, on façonne notre ennemi
TEST: la pression entre les membres à un moment devient trop importante
TEST: Macron saisit la discorde avec le Brésil pour s’opposer à l’embarrassant accord
TEST: Je vous renvoie pour cela à l’excellent documentaire



__infi_loc_à_verbe__
    de manière à            ~..(?:ée?s?|ez)$
    du mal à                ~..(?:ée?s?|ez)$
    intérêt à               ~..(?:ée?s?|ez)$
        <<- /infi/ morph(\-1, ":V", ":M") and not (\-1.endswith("ez") and value(>1, "|vous|"))
................................................................................
TEST: Le commandant de zone…
TEST: À quoi rime de décider de mesures écologiques d’en haut
TEST: L’accès au cannabis thérapeutique où à ses dérivés permettrait de plus aux autorités de santé d’apporter aux malades les garanties nécessaires quant à la qualité, aux concentrations, ainsi qu’aux modalités d’obtention et d’utilisation optimale.
TEST: l’industrie est également touchée, avec « des pertes de commandes de véhicules chez Renault et chez Peugeot »


__infi_qqch_de__
    [afin|avant]                                [de|d’]  ~..ée?s?$
    à même                                      [de|d’]  ~..ée?s?$
    avant ?même¿                                [de|d’]  ~..ée?s?$
    en train                                    [de|d’]  ~..ée?s?$


    en vue                                      [de|d’]  ~..ée?s?$
    il [est|était|fut|fût|sera|serait] temps    [de|d’]  ~..ée?s?$
    impossible                                  [de|d’]  ~..ée?s?$
    marre                                       [de|d’]  ~..ée?s?$


    [>façon|>manière]                           [de|d’]  ~..ée?s?$
    [>intention|>volonté]                       [de|d’]  ~..ée?s?$



        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Le verbe devrait être à l’infinitif.

    force est  [de|d’]  ~..ée?s?$




        <<- /infi/ not value(<1, "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and analyse(\-1, ":Q", ":M")
        --1>> =suggVerbInfi(\-1)                                                                    # Après “force est de”, le verbe devrait être à l’infinitif.

TEST: Nous étions en train de {{trouvé}} une solution à ces soucis récurrents.
TEST: en train de {{percées}}
TEST: ils sont à même de {{trouvé}} la bonne réponse

TEST: elle est en train de {{mangée}}
TEST: impossible d’{{échappée}} à cette horreur.

TEST: il serait temps de {{poussée}} la logique jusqu’au bout

TEST: Force est d’{{pensée}} que nous allons y arriver avec seulement nos bonnes intentions.



__infi_de_verbe__
    [de|d’]  [le|l’|leur|les]             @:V¬:[YNAM]|>(?:lui|plus)/
    [<start>|,]  [de|d’] [nous|vous|lui]  @:V¬:[YE]|>(?:lui|plus)/
        <<- /infi/ \-1.islower() --1>> =suggVerbInfi(\-1)                               # Erreur probable. Après “de”, le verbe devrait être à l’infinitif.

................................................................................
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “\1 \2 \3”, le verbe devrait être à l’infinitif.

    >faire  ?[pas|jamais|guère]¿  semblant  [de|d’]  ?[nous|vous|le|la|l’|les|leur]¿  @:V1.*:Q
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “faire semblant de”, le verbe devrait être à l’infinitif.

    [de|d’]  @:V1.*:Q¬:N
        <<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer)/")
            and not before("(?i)\\b(?:quelqu(?:e chose|’une?)|qu’y a-t-il |(?:l(es?|a)|nous|vous|me|te|se) trait|personne|points? +$|autant +$|rien d(?:e |’)|rien(?: +[a-zéèêâîûù]+|) +$)")
            and not tag_before(\1, "ce_que")
        -2>> =suggVerbInfi(\2)                                                          # Le verbe devrait être à l’infinitif.

TEST: d’en {{parlé}} sans cesse
TEST: cela suffit de les {{aimait}}
TEST: de ne leur en {{avancé}} que le nécessaire.
TEST: de l’y {{poussé}}
................................................................................
TEST: Il n’y a rien de mécanique, ni de prédestiné.
TEST: il convient donc de ne point les négliger.
TEST: Il se moque de nous en fournissant de pareilles marchandises frelatées.
TEST: qu’y a-t-il de changé, de perturbé, de modifié ?
TEST: ce qu’ils ont d’obscur, d’exagéré et parfois de sec et de figé
TEST: ce qu’il y a de compliqué dans ces affaires.
TEST: Un patient peut avoir autant de satanées maladies qui lui chante.



__infi_y_verbe!3__
    y ~ée?s?$
        <<- /infi/ morph(\2, ":V", ":[123][sp]") -2>> _                                 # Le verbe ne devrait pas être un participe passé.

TEST: y {{mangée}} était un supplice
................................................................................
TEST: elles ne s’y étaient pas {{donnée}}.
TEST: sans fin elles se sont succédé


__ppas_se_être__
    [me|m’|te|se|s’]  ?[y|en]¿  >être  *WORD
        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QA]") --1>> =suggVerbPpas(\-1)                 # Incohérence. Après « s’être », le verbe doit être un participe passé.
        <<- /ppas/ __else__ and morph(\-2, ":[123]s") and morph(\-1, ":Q.*:p") and not before("(?i)\\bqu[e’][, ]|\\bon (?:ne |)$")
        --1>> =suggSing(\-1)                                                                        # Le participe passé devrait être au singulier.

    tu  t’  ?[y|en]¿  [es|étais|seras|serais|fus|fusses]  *WORD
        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QA]") --1>> =suggVerbPpas(\-1)                 # Incohérence. Après « s’être », le verbe doit être un participe passé.

TEST: s’être toujours {{donner}} le mot.
TEST: je suis venu et me suis totalement {{donnés}} à cette œuvre
................................................................................
TEST: tu t’en es {{foutait}} autant que possible.
TEST: elles se sont dit : « Allons-y ».
TEST: On s’est rencontrées lorsqu’on travaillait là-bas.
TEST: des soins que je m’étais donnés.
TEST: Si t’es pas contente, t’achètes pas.
TEST: t’étais vraiment cinglé à cette époque.
TEST: il m’était évident que cette mission était à durée déterminée



## se rendre compte
__ppas_s_être_rendu_compte__
    >être  rendu  compte
        <<- !2:3>>
        <<- ~2:3>> _
................................................................................
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                                    *WORD
    [<start>|,|$:Cs]  [un|le|ce|cet]                    (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                                                 *WORD
    [<start>|,|$:Cs]  [un|le|ce|cet]                    (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                                      *WORD
        <<- /ppas/ morph(\1, ":[NA].*:[me]", ":[GWf]") and morph(\-1, ":A.*:f", ":[GWme]") and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P")))
        --1>> =switchGender(\-1)                                                                    # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])             *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿  (>avoir) [été|semblé|paru]                                                               *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler])  [devenu+e|redevenu+e|resté+e|demeuré+e]                              *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
................................................................................
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                                    *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                                                 *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                                      *WORD
        <<- /ppas/ morph(\1, ":[NA].*:[fe]", ":[GWm]") and morph(\-1, ":A.*:m", ":[GWfe]") and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P")))
        --1>> =switchGender(\-1)                                                                    # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])             *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  (>avoir) [été|semblé|paru]                                                               *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler])  [devenu+e|redevenu+e|resté+e|demeuré+e]                              *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
................................................................................
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                                    *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                                                 *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                                      *WORD
        <<- /ppas/ ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]")))
            and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P")))
        --1>> =switchGender(\-1)                                                                    # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])                   *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  (>avoir) [été|semblé|paru]                                                                     *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler])  [devenus|redevenus|restés|demeurés|devenues|redevenues|restées|demeurées]  *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿
................................................................................
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                                    *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || être [devenus|redevenus|restés|demeurés|devenues|redevenues|restées|demeurées]                               *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                                      *WORD
        <<- /ppas/ ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]"))) and morph(\2, ":(?:[123]p|P)")
        --1>> =switchGender(\-1)                                                                    # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  *WORD  ?[ne|n’]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                *WORD
    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  *WORD  ?[ne|n’]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
................................................................................
TEST: l’écolier qui ne croyait pas avoir été {{brillante}}
TEST: les femmes sont vraiment {{partis}}                                         ->> parties
TEST: les hommes ne sont pas tout à fait {{fâchées}}                              ->> fâchés
TEST: plusieurs invités qui ne sont pas {{contentes}}
TEST: les réunions sans cesse reportées qui sont {{annulés}}
TEST: les hommes croyant être {{instruites}}
TEST: Les tortures que ce journaliste pense être “normales”.



__ppas_nom_propre_être_accord_genre__
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])          *WORD
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿  (>avoir) [été|semblé|paru]                                                            *WORD
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler])  [devenu+e|redevenu+e|resté+e|demeuré+e]                           *WORD
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿
................................................................................
TEST: Quel est le problème ? Je ne fais que ramener Paul à la raison.
TEST: La voir se fêler ainsi lui noua la gorge.
TEST: Quoi de neuf, mec ?
TEST: T’as enfin trouvé des gens avec qui t’entendre ?
TEST: ça fait du bien de se l’entendre dire
TEST: Laisse tomber, mec ! Pour qui tu te prends ?
TEST: il y avait souvent foule




!!! Tests historiques                                                                             !!

## Version 0.5.14
TEST: par le léger tissu de rayonne qui les protégeait en ce moment.







<
<
<
<
<
<
<







 







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







 







|





|
|







 







|







 







>
>
>
>







 







>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







|







 







>







 







<
<
<
<
<
<
<
<







 







|


>







 







|







 







|







 







>







 







>







 







>







 







|







 







>







 







>







 







>
>
>







 







|







 







|




|




|













>







 







>







 







|
<
|
|
>
>
|
<
|
|
>
>
|
|
>
>
>
|

<
>
>
>
>



|


>

<
>

>

<







 







|







 







>







 







|







 







>







 







|







 







|







 







|







 







|







 







>







 







>







1206
1207
1208
1209
1210
1211
1212







1213
1214
1215
1216
1217
1218
1219
....
1699
1700
1701
1702
1703
1704
1705






















1706
1707
1708
1709
1710
1711
1712
....
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
....
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
....
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
....
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
....
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
....
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
....
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
....
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
....
5903
5904
5905
5906
5907
5908
5909








5910
5911
5912
5913
5914
5915
5916
....
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
....
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
....
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
.....
10847
10848
10849
10850
10851
10852
10853
10854
10855
10856
10857
10858
10859
10860
10861
.....
11114
11115
11116
11117
11118
11119
11120
11121
11122
11123
11124
11125
11126
11127
11128
.....
12412
12413
12414
12415
12416
12417
12418
12419
12420
12421
12422
12423
12424
12425
12426
.....
12719
12720
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730
12731
12732
12733
.....
13409
13410
13411
13412
13413
13414
13415
13416
13417
13418
13419
13420
13421
13422
13423
.....
13447
13448
13449
13450
13451
13452
13453
13454
13455
13456
13457
13458
13459
13460
13461
.....
13715
13716
13717
13718
13719
13720
13721
13722
13723
13724
13725
13726
13727
13728
13729
13730
13731
.....
14652
14653
14654
14655
14656
14657
14658
14659
14660
14661
14662
14663
14664
14665
14666
.....
14846
14847
14848
14849
14850
14851
14852
14853
14854
14855
14856
14857
14858
14859
14860
14861
14862
14863
14864
14865
14866
14867
14868
14869
14870
14871
14872
14873
14874
14875
14876
14877
14878
14879
14880
14881
14882
14883
14884
.....
17944
17945
17946
17947
17948
17949
17950
17951
17952
17953
17954
17955
17956
17957
17958
.....
17973
17974
17975
17976
17977
17978
17979
17980

17981
17982
17983
17984
17985

17986
17987
17988
17989
17990
17991
17992
17993
17994
17995
17996

17997
17998
17999
18000
18001
18002
18003
18004
18005
18006
18007
18008

18009
18010
18011
18012

18013
18014
18015
18016
18017
18018
18019
.....
18031
18032
18033
18034
18035
18036
18037
18038
18039
18040
18041
18042
18043
18044
18045
.....
18069
18070
18071
18072
18073
18074
18075
18076
18077
18078
18079
18080
18081
18082
18083
.....
18983
18984
18985
18986
18987
18988
18989
18990
18991
18992
18993
18994
18995
18996
18997
.....
19004
19005
19006
19007
19008
19009
19010
19011
19012
19013
19014
19015
19016
19017
19018
.....
19632
19633
19634
19635
19636
19637
19638
19639
19640
19641
19642
19643
19644
19645
19646
.....
19647
19648
19649
19650
19651
19652
19653
19654
19655
19656
19657
19658
19659
19660
19661
.....
19662
19663
19664
19665
19666
19667
19668
19669
19670
19671
19672
19673
19674
19675
19676
.....
19678
19679
19680
19681
19682
19683
19684
19685
19686
19687
19688
19689
19690
19691
19692
.....
19712
19713
19714
19715
19716
19717
19718
19719
19720
19721
19722
19723
19724
19725
19726
.....
23437
23438
23439
23440
23441
23442
23443
23444
23445
23446
23447
23448
23449
23450
23451
    [nN][fF][  -]?(?:c|C|e|E|p|P|q|Q|s|S|x|X|z|Z|[eE][nN](?:[  -][iI][sS][oO]|))[  -]?[0-9]+(?:[/ ‑-][0-9]+|)
    <<- not re.search("^NF (?:C|E|P|Q|S|X|Z|EN(?: ISO|)) [0-9]+(?:‑[0-9]+|)", \0)
    ->> =formatNF(\0)                                       # Norme française. Utilisez les espaces et tirets insécables.|http://fr.wikipedia.org/wiki/Liste_de_normes_NF

TEST: __nf__ Norme française : {{Nf-EN ISO 3892-23}}










!!
!!
!!!! Cohérence des guillemets                                                                     !!
!!
!!

................................................................................
TEST: Assis, gronde{{-t -}}elle                         ->> -t-
TEST: vient-il demain ?
TEST: prend-elle l’avantage ?
TEST: saura-t-on jamais la vérité ?
TEST: arrive-t-elle ce matin ?
TEST: y aura-t-il du poulet au dîner ?

























@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: purge_tag_disambiguate                                                                  _
................................................................................
    [le|la|l’|les]  [lui|leur|en]      @:¬:[OXW]
    leur            en                 @:¬:[OXW]
        <<- =>> select(\2, ":(?:[123][sp]|P|Y)")

    $:M  @:[123]s¬:[QW]
        <<- \2.islower() and morph(<1, ":Cs|<start>") =>> select(\2, ":[123][sp]")

    <start>  $:M  @:(?:[123]s|Ov)¬:A
        <<- =>> =select(\2, ":M")

    [que|qu’|combien|pourquoi|qui|quand|où]  ?[en|y]¿  *WORD
        <<- =>> exclude(\-1, ":E")

    [<start>|,]  quelqu’ un  *WORD
        <<- =>> exclude(\4, ":N")

    >falloir [>pouvoir|>savoir|>vouloir|>manger|>conseiller]
        <<- =>> exclude(\2, ":N")


__da_été__
    >avoir été
................................................................................
    l’ [un|une]  *WORD
        <<- not value(\3, "|plus|") =>> select(\3, ":[123][sp]")

    [des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune]  *WORD
        <<- =>> exclude(\2, ":V")

    [un|une]  *WORD
        <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|") and not morph(\2, ":P") =>> exclude(\2, ":V")

    [une|le|la|les|des|chaque|quelque|quelques|cet|cette|ces|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs] personne
        <<- =>> select(\-1, ":N")

    de  [la|l’]  $:¬:Y
        <<- not value(<1, "|semblant|") =>> exclude(\3, ":V")

................................................................................
        <<- morph(\-1, ":[NA]") ~1:3>> ␣

    alors    [que|qu’]
    dès lors [que|qu’]
        <<- ~>> ␣
        <<- =>> define(\1, [":Cs"])

    quelqu’ [un|une]
        <<- ~>> ␣
        <<- =>> change_meta(\1, "WORD")


__fusions_noms_communs__
    au revoir
        <<- ~>> ␣
        <<- =>> define(\1, [":N:m:i"])

    n’ importe [qui|quoi|quel|quelle|quels|quelles|où]
................................................................................
    black [>bloc|>block]
    machine [learning+s]
    nec plus ultra
    standing >ovation
    star [system+s]
        <<- ~>> ␣

    presqu’ [>ile|>île]
        <<- ~>> ␣
        <<- =>> change_meta(\1, "WORD")

    *NUM : *NUM
        <<- space_after(\1, 0, 0) and space_after(\1, 0, 0) ~>> ␣

    *NUM  ~^h[0-9][0-9]$
        <<- space_after(\1, 0, 0) ~>> ␣


................................................................................
!!!! Noms composés                                                                                !!

__tag_noms__
    ~\w-là$
        <<- />> -là
        <<- =>> =define_from(\1, 0, -3)


!!!! Élisions                                                                                     !!

# presque : élision
__typo_presque__
    presqu’  *WORD
        <<- /typo/ not morph(\2, ">[iî]le/") -1>> "presque "            # Pas d’élision autorisée sur “presque”, sauf avec “presqu’île”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745

TEST: {{Presqu’}}exclusivement bâtie en pierre.
TEST: C’est une presqu’île.
TEST: Cette presqu’ile est particulièrement venteuse.


# quelque : élision
__typo_quelque__
    quelqu’  *WORD
        <<- /typo/ not value(\2, "|un|une|") -1>> "quelque "            # Pas d’élision autorisée sur “quelque”, sauf avec “quelqu’un” ou “quelqu’une”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745

TEST: {{Quelqu’}}absurde que ce soit, il faut y céder.
TEST: quelqu’un vient.
TEST: elle s’en est allée avec quelqu’une…



!!
!!
!!!! Verbes composés                                                                              !!
!!
!!
................................................................................
TEST: le {{VIième}} siècle                      ->> VIᵉ
TEST: Le {{XX ème}} siècle.                     ->> XXᵉ
TEST: Le {{XXIème}} siècle.                     ->> XXIᵉ
TEST: le {{XXè}} siècle.                        ->> XXᵉ
TEST: les {{CXIèmes}}                           ->> CXIᵉˢ


!!!! Chimie                                                                                       !!

__chim_molécules__
    [CaCO3|CaSO4]
    CO2
    [H2CO3|H2O|H2SO4]
    [Na2CO3|Na2O|Na2SO4]
    H2
    HNO3
    Fe2O3
    KMnO4
    NO2
    N2
    O2
    SiO2
    [SO2|SO3]
        <<- /chim/ ->> =\1.replace("2", "₂").replace("3", "₃").replace("4", "₄")                    # Typographie des composés chimiques. [!]

TEST: __chim__ les molécules {{CaCO3}} et {{H2O}}…


!!!! Dates                                                                                        !!

__fusion_date__
    *NUM  -  ~^\d\d?$  -  ~^\d{2,5}$
        <<- \1.isdigit() ~>> ␣
        <<- =>> change_meta(\1, "DATE")
................................................................................
!!!! Traits d’union                                                                               !!
!!
!!

### ce / cet / cette / ces + nom + là
__tu_ce_cette_ces_nom_là_ci__
    [ce|cet|cette|ces] *WORD [là|ci]
        <<- /tu/ morph(\2, ":[NB]", ":V0e") and not value(>1, "|où|") -2:3>> \2-là      # Il manque probablement un trait d’union.

    [ce|cet|cette|ces] *WORD la [<end>|,]
        <<- /tu/ morph(\2, ":[NB]") -2:3>> \2-là                                # Il manque probablement un trait d’union.

    [ce|cet|cette|ces] *WORD si [<end>|,]
        <<- /tu/ morph(\2, ":[NB]") -2:3>> \2-ci                                # Il manque probablement un trait d’union.

................................................................................
TEST: à ce {{moment là}}                                                        ->> moment-là
TEST: Il faisait froid cet {{hiver la}}.                                        ->> hiver-là
TEST: Ces {{trois là}} sont incollables.
TEST: Je connais bien cette {{sensation là}}.
TEST: Cette {{voiture si}}, c’est celle-là que je veux.
TEST: ce que je veux c’est ce {{véhicule ci}}
TEST: Laisse ce chiot là où il est !
TEST: Ce fut là en fait une appellation fautive


### Préfixes
__tu_préfixe_ex__
    ex  $:N¬*
        <<- /tu/ not value(\2, "|aequo|nihilo|cathedra|absurdo|abrupto|")
        ->> ex-\2                                                           # S’il s’agit d’un seul mot, il manque un trait d’union.
................................................................................
        <<- /conf/ not \3.istitle() and not value(<1, "|plus|moins|")
        -3>> =suggSimil(\3, ":[NA]", True)                                                          # Incohérence avec “\1\2” : “\3” est une forme verbale conjuguée.

TEST: d’une {{habille}} de femme
TEST: plus d’un ont été traumatisés
TEST: Plus d’une sont parties aussi vite qu’elles étaient venues










__conf_par_vconj__
    par  ?[le|la|l’|les]¿  @:[123][sp]¬:[GNA]
        <<- /conf/ not \-1.istitle() --1>> =suggSimil(\-1, ":[NA]", True)                           # Incohérence avec “\1” : “\-1” est une forme verbale conjuguée.

    par  [un|une]  @:[123][sp]¬:[GNA]
        <<- /conf/ not \3.istitle() and not value(<1, "|plus|moins|un|une|")
................................................................................
TEST: à leur {{profile}}
TEST: une référence à l’astuce de base qui permet d’outrepasser ses droits.
TEST: Le mari répète à l’envi qu’il a découvert la France à travers les mots de sa femme.
TEST: Il reste de nombreux militants sincères à la FI.


    [malgré|dès] [le|la|l’|les|leur|leurs]  @:V¬:[GNAWMB]
        <<- /conf/ not \-1.istitle() -3>> =suggSimil(\3, ":[NA]", True)         # Incohérence : après “\1 \2”, on devrait trouver un groupe nominal.

TEST: malgré l’{{arrête}} qui interdisait le port
TEST: dès le {{commencent}}, j’ai vu le problème.
TEST: malgré les deux précédentes erreurs


__conf_préverbes__
    ne n’
        <<- /conf/ not \1.isupper() ->> ne m’|n’                        # Incohérence. Double négation.

................................................................................
TEST: Qu’elle avait été accueillie avec joie.


__conf_quelle_qu_elle__
    quelle  [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y]
        <<- /conf/ not (value(\2, "|en|ne|")  and morph(>1, ":V0e")) -1>> qu’elle                   # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”.

    quelle  @:V¬:[NA].*:[fe]|>(?:être|plus|point)/
        <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|"))
        -1>> qu’elle                                                                                # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”.

TEST: {{Quelle}} y vienne, on verra ce qu’elle vaut.
TEST: {{Quelle}} a du répondant, cette gamine !
TEST: {{Quelle}} partit prendre son repas à la cantine, je n’en avais cure.
TEST: Il se plaint {{quelle}} ne nous dit rien.
................................................................................
TEST: {{Quelle}} l’apprenne un jour, on n’y peut rien.
TEST: Je crois {{quelle}} n’en sait pas assez pour nous nuire.


    quelles [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y]
        <<- /conf/ not (value(\2, "|en|ne|") and morph(>1, ":V0e")) -1>> qu’elles                   # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”.

    quelles @:V¬:[NA].*:[fe]|>(?:être|plus|point)/
        <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|"))
        -1>> qu’elles                                                                               # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”.

TEST: Je veux {{quelles}} s’efforcent à y parvenir.
TEST: {{Quelles}} t’arrivent seulement à la cheville, voilà qui serait étonnant.
TEST: {{Quelles}} m’engueulent encore une seule fois et elles vont le regretter.
TEST: {{Quelles}} viennent et qu’on en finisse.
................................................................................
    à l’ occasion
    à l’ ordre du jour
    à l’ un d’ entre eux
    à l’ unanimité
    à l’ unisson
    à l’ une d’ entre elles
    à l’ échelle [nationale|mondiale|régionale|départementale|cantonale|locale|galactique|universelle]
    à l’ étouffée
    à l’ évidence
    à l’ œil nu
    à l’ [un|une] des leurs
    à la [bourre|con|coule|dérobée|diable|fois|leur|manque|mords-moi-le-nœud|papa|ramasse|renverse|redresse|rescousse|sauvette|volée]
    à la bonne franquette
    à la limite du supportable
    à la lumière de tout [ceci|cela|ça]
................................................................................
    comme bon [me|te|lui|leur|nous|vous] semble
    comme au bon vieux temps
    comme cul et chemise
    comme [frappé|frappée|frappés|frappées] par la foudre
    comme n’ importe où ?ailleurs¿
    comme par [enchantement|magie]
    comme par un fait exprès
    comme pas deux
    comme peau de chagrin
    comme promis
    comme qui dirait
    comme si [de|d’] rien n’ était
    contrairement aux apparences
    contre mauvaise fortune ?,¿ bon cœur
    contre nature
................................................................................
    >chasse à l’ homme
    >chasse d’ eau
    >chasseuse [de|d’] primes
    >chemin [de|d’] [traverse|fer]
    >chemise sans >manche
    >chèque sans provision
    >chili con carne
    >chou à la crème ?[fouettée|diplomate|mousseline|patissière|pralinée]¿
    >claire comme [de|d’] l’ eau [de|d’] [boudin|roche|source]
    >claire comme du cristal
    >claire comme jus [de|d’] [boudin|>chaussette|chique]
    [>clé|>clef] à molette
    >clin d’ œil
    >code [de|d’] bonne conduite
    >commise d’ office
................................................................................
    blond   [argenté|platine]
    gris    [acier|anthracite|argenté|fer|perle|souris]
    jaune   [canari|citron|doré|maïs|paille|sable]
    noir    [de|d’] [encre|jais]
    noir    et blanc
    noir    sur blanc
    rose    [bonbon|chair|corail]
    rouge   [anglais|brique|cardinal|carmin|cerise|cochenille|coquelicot|écarlate|feu|fraise|grenat|groseille|incarnat|indien|rubis|sang|sanguin|tomate|vermeille|vermillon]
    vert    [bouteille|céladon|émeraude|épinard|impérial|lichen|olive|perroquet|pistache|poireau|pomme|prairie|printemps|sapin|sauge|tilleul]
    couleur sable
        <<- morph(<1, ":[NA]", ":D") ~>> *
        <<- __else__ and morph(<1, ":D|>(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)") ~>> ␣
        <<- __also__ =>> define(\1, [":A:e:i"])


................................................................................
    >faire amende honorable
    >faire bande à part
    >faire bon accueil
    >faire bonne figure
    >faire chou blanc
    >faire copain copain
    >faire de [mon|ton|son|notre|votre|leur] mieux
    >faire figure d’ exception
    >faire front commun
    >faire grise mine
    >faire grand [bruit|cas]
    >faire ?[bonne|excellente|grande|mauvaise]¿ impression
    >faire long feu
    >faire [machine|marche] arrière
    >faire main basse
................................................................................
    [>mettre|>remettre] l’ [écart|épreuve]
    [>mettre|>remettre] au [point|pas]
    [>mettre|>remettre] en [avant|branle|bouche|demeure|garde|jeu|lumière|mouvement|œuvre|place|scène|terre]
    [>mettre|>remettre] de côté
    >mourir jeune
    [>naître|>naitre] de la dernière pluie
    [>naître|>naitre] sous x
    >parler affaires
    >partir en vrille
    >percer à jour
    >perdre [connaissance|conscience|patience|raison]
    >perdre d’ avance
    >piquer au vif
    >porter [assistance|atteinte|bonheur|caution|chance|malheur|plainte|préjudice|secours]
    >poser problème
................................................................................
TEST: Ce qui rend les pompes à chaleur moins rentables.
TEST: l’accusation de lynchage médiatique proférée par François de Clermont à l’encontre de “Marianne” ne tient pas.
TEST: La poïesis, en grec, est ce qui permet de faire passer n’importe quoi du non-être à l’être
TEST: un moteur nouvelle génération
TEST: La première est la critique dite artiste
TEST: la critique conduit nombre de protestataires à se replier sur des modalités de défense efficaces dans le passé mais désormais largement inadaptées
TEST: Tu crois que Microsoft peut contraindre les projets libres à quoi que ce soit ?
TEST: « L’école produit la norme en matière de langage »
TEST: Parler affaires.



@@@@
@@@@
@@@@
@@@@
@@@@END_GRAPH                                                                                      _
................................................................................
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemSing(\2, True)     # Accord de genre erroné : « \1 » est féminin.

TEST: {{Quelle}} homme.                                       ->> Quel
TEST: {{Quelle}} {{folles}}
TEST: {{Quelle}} {{chien}}
TEST: {{Quelle}} {{chats}}
TEST: Quelle sale journée…
TEST: On pourrait également rappeler à quel point l’Église catholique fut hostile à la laïcité et la combattit violemment.

__gn_quelles_1m!8__
    quelles  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m:s", ":(?:V0|Oo|[NA].*:[fe]:[pi])")        -1>> quel                       # Accord de genre et de nombre erroné. « \2 » est masculin et au singulier.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemPlur(\2, True)     # Accord de genre et de nombre erroné : « \1 » est féminin et au pluriel.
        <<- /gn/ morph(\2, ":[NA].*:f:s", ":(?:V0|Oo|[NA].*:[fe]:[pi])")        -1>> quelle                     # Accord de nombre erroné : « \2 » est au singulier.
        <<- /gn/ __also__                                                       -2>> =suggPlur(\2)              # Accord de nombre erroné : « \1 » est au pluriel.
................................................................................
TEST: les quelque 2,5 millions d’habitants
TEST: les quelque 12 000 stations-service


## Nombres
__gn_nombre_lettres_1m__
    $:B:e:p  *WORD
        <<- /gn/ not value(\1, "|neuf|mille|") and ( (morph(\2, ":[NA].*:s", "*") and not value(\2, "|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL) and not re.search("^[IVXLDM]+$", \1)
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    neuf  *WORD
        <<- /gn/ ( morph(\2, ":[NA].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not value(\2, "|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    mille  *WORD
        <<- /gn/ not value(\2, "|multiplié|divisé|") and (morph(\2, ":[NA].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|")
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS.        ->> idiots
TEST: Il a abandonné neuf {{enfant}}.                                               ->> enfants
TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts.              ->> travailleurs
TEST: Il y a quatre cents {{mot}} dans la phrase.                                   ->> mots
TEST: cent {{mot}}                                                                  ->> mots
TEST: cinquante {{mot}}                                                             ->> mots
TEST: mille cinquante {{mot}}                                                       ->> mots
TEST: deux {{tête}}                                                                 ->> têtes
TEST: un logement neuf bâti par des professionnels.
TEST: un mille marin.
TEST: L’article VII mentionné dans la revue
TEST: Le produit de cinq multiplié par trois.


__gn_nombre_chiffres_1m__
    [0|1|01]  @:[NAQ].*:p¬*
        <<- /gn/ space_after(\1, 1, 1) and not value(\2, "|Rois|Corinthiens|Thessaloniciens|")
        -2>> =suggSing(\2)                                                                  # Accord de nombre erroné : « \1 » devrait être au singulier.

................................................................................
TEST: l’idée consiste à la lui donner sans contrepartie et voir ce qu’il en fera.
TEST: à leur plus grand fils, ils ont offert une voiture.
TEST: ça va d’autonome à hautement dépendant
TEST: à lui donner trop d’importance, on façonne notre ennemi
TEST: la pression entre les membres à un moment devient trop importante
TEST: Macron saisit la discorde avec le Brésil pour s’opposer à l’embarrassant accord
TEST: Je vous renvoie pour cela à l’excellent documentaire
TEST: cuisiner à l’étouffée


__infi_loc_à_verbe__
    de manière à            ~..(?:ée?s?|ez)$
    du mal à                ~..(?:ée?s?|ez)$
    intérêt à               ~..(?:ée?s?|ez)$
        <<- /infi/ morph(\-1, ":V", ":M") and not (\-1.endswith("ez") and value(>1, "|vous|"))
................................................................................
TEST: Le commandant de zone…
TEST: À quoi rime de décider de mesures écologiques d’en haut
TEST: L’accès au cannabis thérapeutique où à ses dérivés permettrait de plus aux autorités de santé d’apporter aux malades les garanties nécessaires quant à la qualité, aux concentrations, ainsi qu’aux modalités d’obtention et d’utilisation optimale.
TEST: l’industrie est également touchée, avec « des pertes de commandes de véhicules chez Renault et chez Peugeot »


__infi_qqch_de__
    [afin|avant]                                [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$

    avant ?même¿                                [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
    marre                                       [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 de”, le verbe devrait être à l’infinitif.

    à même                                      [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$

    en train                                    [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
    en vue                                      [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 \2 de”, le verbe devrait être à l’infinitif.

    [>façon|>manière]                           [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
    [>intention|>volonté]                       [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 de”, le verbe devrait être à l’infinitif s’il s’agit bien de décrire une action.

    il >être [temps|impossible|indispensable|nécessaire|utile]  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “il est \3 de”, le verbe devrait être à l’infinitif.


    [<start>|,] impossible  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “impossible de”, le verbe devrait être à l’infinitif.

    force [est|était]  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ not value(<1, "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and analyse(\-1, ":Q", ":M")
        --1>> =suggVerbInfi(\-1)                                                                    # Après “force est de”, le verbe devrait être à l’infinitif.

TEST: afin de leur {{percée}} une ouverture
TEST: en train de {{percées}}
TEST: ils sont à même de {{trouvé}} la bonne réponse
TEST: Nous étions en train de {{trouvé}} une solution à ces soucis récurrents.
TEST: elle est en train de {{mangée}}

TEST: je déteste sa manière de la {{rabaissée}} en permanence.
TEST: il serait temps de {{poussée}} la logique jusqu’au bout
TEST: impossible d’{{échappée}} à cette horreur.
TEST: Force est d’{{pensée}} que nous allons y arriver avec seulement nos bonnes intentions.



__infi_de_verbe__
    [de|d’]  [le|l’|leur|les]             @:V¬:[YNAM]|>(?:lui|plus)/
    [<start>|,]  [de|d’] [nous|vous|lui]  @:V¬:[YE]|>(?:lui|plus)/
        <<- /infi/ \-1.islower() --1>> =suggVerbInfi(\-1)                               # Erreur probable. Après “de”, le verbe devrait être à l’infinitif.

................................................................................
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “\1 \2 \3”, le verbe devrait être à l’infinitif.

    >faire  ?[pas|jamais|guère]¿  semblant  [de|d’]  ?[nous|vous|le|la|l’|les|leur]¿  @:V1.*:Q
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “faire semblant de”, le verbe devrait être à l’infinitif.

    [de|d’]  @:V1.*:Q¬:N
        <<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer)/")
            and not before("(?i)\\b(?:quelqu(?:e chose|’une?)|qu’y a-t-il |(?:l(es?|a)|nous|vous|me|te|se) trait|personne|points? +$|autant +$|ça +|rien d(?:e |’)|rien(?: +[a-zéèêâîûù]+|) +$)")
            and not tag_before(\1, "ce_que")
        -2>> =suggVerbInfi(\2)                                                          # Le verbe devrait être à l’infinitif.

TEST: d’en {{parlé}} sans cesse
TEST: cela suffit de les {{aimait}}
TEST: de ne leur en {{avancé}} que le nécessaire.
TEST: de l’y {{poussé}}
................................................................................
TEST: Il n’y a rien de mécanique, ni de prédestiné.
TEST: il convient donc de ne point les négliger.
TEST: Il se moque de nous en fournissant de pareilles marchandises frelatées.
TEST: qu’y a-t-il de changé, de perturbé, de modifié ?
TEST: ce qu’ils ont d’obscur, d’exagéré et parfois de sec et de figé
TEST: ce qu’il y a de compliqué dans ces affaires.
TEST: Un patient peut avoir autant de satanées maladies qui lui chante.
TEST: C’est toujours ça de gagné.


__infi_y_verbe!3__
    y ~ée?s?$
        <<- /infi/ morph(\2, ":V", ":[123][sp]") -2>> _                                 # Le verbe ne devrait pas être un participe passé.

TEST: y {{mangée}} était un supplice
................................................................................
TEST: elles ne s’y étaient pas {{donnée}}.
TEST: sans fin elles se sont succédé


__ppas_se_être__
    [me|m’|te|se|s’]  ?[y|en]¿  >être  *WORD
        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QA]") --1>> =suggVerbPpas(\-1)                 # Incohérence. Après « s’être », le verbe doit être un participe passé.
        <<- /ppas/ __else__ and morph(\-2, ":[123]s") and morph(\-1, ":Q.*:p") and not tag_before(\1, "que") and not before("(?i)\\bon (?:ne |)$")
        --1>> =suggSing(\-1)                                                                        # Le participe passé devrait être au singulier.

    tu  t’  ?[y|en]¿  [es|étais|seras|serais|fus|fusses]  *WORD
        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QA]") --1>> =suggVerbPpas(\-1)                 # Incohérence. Après « s’être », le verbe doit être un participe passé.

TEST: s’être toujours {{donner}} le mot.
TEST: je suis venu et me suis totalement {{donnés}} à cette œuvre
................................................................................
TEST: tu t’en es {{foutait}} autant que possible.
TEST: elles se sont dit : « Allons-y ».
TEST: On s’est rencontrées lorsqu’on travaillait là-bas.
TEST: des soins que je m’étais donnés.
TEST: Si t’es pas contente, t’achètes pas.
TEST: t’étais vraiment cinglé à cette époque.
TEST: il m’était évident que cette mission était à durée déterminée
TEST: Cela fait un petit temps qu’on ne s’est plus vus.


## se rendre compte
__ppas_s_être_rendu_compte__
    >être  rendu  compte
        <<- !2:3>>
        <<- ~2:3>> _
................................................................................
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                                    *WORD
    [<start>|,|$:Cs]  [un|le|ce|cet]                    (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                                                 *WORD
    [<start>|,|$:Cs]  [un|le|ce|cet]                    (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                                      *WORD
        <<- /ppas/ morph(\1, ":[NA].*:[me]", ":[GWf]") and morph(\-1, ":A.*:f", ":[GWMme]") and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P")))
        --1>> =switchGender(\-1)                                                                    # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])             *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿  (>avoir) [été|semblé|paru]                                                               *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler])  [devenu+e|redevenu+e|resté+e|demeuré+e]                              *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
................................................................................
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                                    *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                                                 *WORD
    [<start>|,|$:Cs]  [une|la|ma|ta|sa|cette]           (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                                      *WORD
        <<- /ppas/ morph(\1, ":[NA].*:[fe]", ":[GWm]") and morph(\-1, ":A.*:m", ":[GWMfe]") and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P")))
        --1>> =switchGender(\-1)                                                                    # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])             *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  (>avoir) [été|semblé|paru]                                                               *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler])  [devenu+e|redevenu+e|resté+e|demeuré+e]                              *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
................................................................................
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                                    *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                                                 *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                                      *WORD
        <<- /ppas/ ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWMfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]")))
            and (morph(\2, ":[123]s") or (not tag(\1, "enum") and morph(\2, ":P")))
        --1>> =switchGender(\-1)                                                                    # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])                   *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  (>avoir) [été|semblé|paru]                                                                     *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler])  [devenus|redevenus|restés|demeurés|devenues|redevenues|restées|demeurées]  *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿
................................................................................
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                                    *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || être [devenus|redevenus|restés|demeurés|devenues|redevenues|restées|demeurées]                               *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿
        || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                                      *WORD
        <<- /ppas/ ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWMfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]"))) and morph(\2, ":(?:[123]p|P)")
        --1>> =switchGender(\-1)                                                                    # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  *WORD  ?[ne|n’]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                *WORD
    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  *WORD  ?[ne|n’]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
................................................................................
TEST: l’écolier qui ne croyait pas avoir été {{brillante}}
TEST: les femmes sont vraiment {{partis}}                                         ->> parties
TEST: les hommes ne sont pas tout à fait {{fâchées}}                              ->> fâchés
TEST: plusieurs invités qui ne sont pas {{contentes}}
TEST: les réunions sans cesse reportées qui sont {{annulés}}
TEST: les hommes croyant être {{instruites}}
TEST: Les tortures que ce journaliste pense être “normales”.
TEST: La première était René, le parfumeur, qui s’approcha de Catherine


__ppas_nom_propre_être_accord_genre__
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])          *WORD
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿  (>avoir) [été|semblé|paru]                                                            *WORD
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿  ([>être|>sembler])  [devenu+e|redevenu+e|resté+e|demeuré+e]                           *WORD
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿
................................................................................
TEST: Quel est le problème ? Je ne fais que ramener Paul à la raison.
TEST: La voir se fêler ainsi lui noua la gorge.
TEST: Quoi de neuf, mec ?
TEST: T’as enfin trouvé des gens avec qui t’entendre ?
TEST: ça fait du bien de se l’entendre dire
TEST: Laisse tomber, mec ! Pour qui tu te prends ?
TEST: il y avait souvent foule
TEST: Cette fille a plus d’un tour dans son sac.



!!! Tests historiques                                                                             !!

## Version 0.5.14
TEST: par le léger tissu de rayonne qui les protégeait en ce moment.

Changes to graphspell-js/char_player.js.

376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
    ]),


    cut: function (sWord) {
        // returns an arry of strings (prefix, trimed_word, suffix)
        let sPrefix = "";
        let sSuffix = "";
        let m = /^([ldmtsnjcç]|lorsqu|presqu|jusqu|puisqu|quoiqu|quelqu|qu)[’'‘`]([a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st-]+)/i.exec(sWord);
        if (m) {
            sPrefix = m[1] + "’";
            sWord = m[2];
        }
        m = /^([a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st]+)(-(?:t-|)(?:ils?|elles?|on|je|tu|nous|vous|ce)$)/i.exec(sWord);
        if (m) {
            sWord = m[1];







|







376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
    ]),


    cut: function (sWord) {
        // returns an arry of strings (prefix, trimed_word, suffix)
        let sPrefix = "";
        let sSuffix = "";
        let m = /^([ldmtsnjcç]|lorsqu|presqu|jusqu|puisqu|quoiqu|quelqu|qu)[’'‘`ʼ]([a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st-]+)/i.exec(sWord);
        if (m) {
            sPrefix = m[1] + "’";
            sWord = m[2];
        }
        m = /^([a-zA-Zà-öÀ-Ö0-9_ø-ÿØ-ßĀ-ʯfi-st]+)(-(?:t-|)(?:ils?|elles?|on|je|tu|nous|vous|ce)$)/i.exec(sWord);
        if (m) {
            sWord = m[1];

Changes to graphspell-js/tokenizer.js.

35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
            [/^[,.;:!?…«»“”‘’"(){}\[\]·–—¿¡]/, 'PUNC'],
            [/^[A-Z][.][A-Z][.](?:[A-Z][.])*/, 'WORD_ACRONYM'],
            [/^(?:https?:\/\/|www[.]|[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]+[@.][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]{2,}[@.])[a-zA-Z0-9][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_.\/?&!%=+*"'@$#-]+/, 'LINK'],
            [/^[#@][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]+/, 'TAG'],
            [/^<[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st]+.*?>|<\/[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st]+ *>/, 'HTML'],
            [/^\[\/?[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st]+\]/, 'PSEUDOHTML'],
            [/^&\w+;(?:\w+;|)/, 'HTMLENTITY'],
            [/^(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu)['’`]/i, 'WORD_ELIDED'],
            [/^\d\d?[h:]\d\d(?:[m:]\d\ds?|)\b/, 'HOUR'],
            [/^\d+(?:ers?\b|res?\b|è[rm]es?\b|i[èe][mr]es?\b|de?s?\b|nde?s?\b|ès?\b|es?\b|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)/, 'WORD_ORDINAL'],
            [/^\d+(?:[.,]\d+|)/, 'NUM'],
            [/^[&%‰€$+±=*/<>⩾⩽#|×¥£§¢¬÷@-]/, 'SIGN'],
            [/^[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-stᴀ-ᶿᵉʳˢⁿᵈ_]+(?:[’'`-][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-stᴀ-ᶿᵉʳˢⁿᵈ_]+)*/, 'WORD']
        ]
};







|







35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
            [/^[,.;:!?…«»“”‘’"(){}\[\]·–—¿¡]/, 'PUNC'],
            [/^[A-Z][.][A-Z][.](?:[A-Z][.])*/, 'WORD_ACRONYM'],
            [/^(?:https?:\/\/|www[.]|[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]+[@.][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]{2,}[@.])[a-zA-Z0-9][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_.\/?&!%=+*"'@$#-]+/, 'LINK'],
            [/^[#@][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st_-]+/, 'TAG'],
            [/^<[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st]+.*?>|<\/[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st]+ *>/, 'HTML'],
            [/^\[\/?[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-st]+\]/, 'PSEUDOHTML'],
            [/^&\w+;(?:\w+;|)/, 'HTMLENTITY'],
            [/^(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu|presqu|quelqu)['’´‘′`ʼ]/i, 'WORD_ELIDED'],
            [/^\d\d?[h:]\d\d(?:[m:]\d\ds?|)\b/, 'HOUR'],
            [/^\d+(?:ers?\b|res?\b|è[rm]es?\b|i[èe][mr]es?\b|de?s?\b|nde?s?\b|ès?\b|es?\b|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)/, 'WORD_ORDINAL'],
            [/^\d+(?:[.,]\d+|)/, 'NUM'],
            [/^[&%‰€$+±=*/<>⩾⩽#|×¥£§¢¬÷@-]/, 'SIGN'],
            [/^[a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-stᴀ-ᶿᵉʳˢⁿᵈ_]+(?:[’'`-][a-zA-Zà-öÀ-Ö0-9ø-ÿØ-ßĀ-ʯff-stᴀ-ᶿᵉʳˢⁿᵈ_]+)*/, 'WORD']
        ]
};

Changes to graphspell/char_player.py.

362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
    "pseudo", "pré", "re", "ré", "sans", "sous", "supra", "sur", "ultra"
])
aPfx2 = frozenset([
    "belgo", "franco", "génito", "gynéco", "médico", "russo"
])


_zWordPrefixes = re.compile("(?i)^([ldmtsnjcç]|lorsqu|presqu|jusqu|puisqu|quoiqu|quelqu|qu)[’'‘`]([\\w-]+)")
_zWordSuffixes = re.compile("(?i)^(\\w+)(-(?:t-|)(?:ils?|elles?|on|je|tu|nous|vous|ce))$")

def cut (sWord):
    "returns a tuple of strings (prefix, trimed_word, suffix)"
    sPrefix = ""
    sSuffix = ""
    m = _zWordPrefixes.search(sWord)







|







362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
    "pseudo", "pré", "re", "ré", "sans", "sous", "supra", "sur", "ultra"
])
aPfx2 = frozenset([
    "belgo", "franco", "génito", "gynéco", "médico", "russo"
])


_zWordPrefixes = re.compile("(?i)^([ldmtsnjcç]|lorsqu|presqu|jusqu|puisqu|quoiqu|quelqu|qu)[’'‘`ʼ]([\\w-]+)")
_zWordSuffixes = re.compile("(?i)^(\\w+)(-(?:t-|)(?:ils?|elles?|on|je|tu|nous|vous|ce))$")

def cut (sWord):
    "returns a tuple of strings (prefix, trimed_word, suffix)"
    sPrefix = ""
    sSuffix = ""
    m = _zWordPrefixes.search(sWord)

Changes to graphspell/tokenizer.py.

27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
            r'(?P<FOLDERWIN>[a-zA-Z]:\\(?:Program Files(?: [(]x86[)]|)|[\w.()]+)(?:\\[\w.()-]+)*)',
            r'(?P<PUNC>[][,.;:!?…«»“”‘’"(){}·–—¿¡])',
            r'(?P<WORD_ACRONYM>[A-Z][.][A-Z][.](?:[A-Z][.])*)',
            r'(?P<LINK>(?:https?://|www[.]|\w+[@.]\w\w+[@.])\w[\w./?&!%=+*"\'@$#-]+)',
            r'(?P<HASHTAG>[#@][\w-]+)',
            r'(?P<HTML><\w+.*?>|</\w+ *>)',
            r'(?P<PSEUDOHTML>\[/?\w+\])',
            r"(?P<WORD_ELIDED>(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu)['’`])",
            r'(?P<WORD_ORDINAL>\d+(?:ers?|res?|è[rm]es?|i[èe][mr]es?|de?s?|nde?s?|ès?|es?|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)\b)',
            r'(?P<HOUR>\d\d?[h:]\d\d(?:[m:]\d\ds?|)\b)',
            r'(?P<NUM>\d+(?:[.,]\d+|))',
            r'(?P<SIGN>[&%‰€$+±=*/<>⩾⩽#|×¥£¢§¬÷@-])',
            r"(?P<WORD>\w+(?:[’'`-]\w+)*)"
        )
}







|







27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
            r'(?P<FOLDERWIN>[a-zA-Z]:\\(?:Program Files(?: [(]x86[)]|)|[\w.()]+)(?:\\[\w.()-]+)*)',
            r'(?P<PUNC>[][,.;:!?…«»“”‘’"(){}·–—¿¡])',
            r'(?P<WORD_ACRONYM>[A-Z][.][A-Z][.](?:[A-Z][.])*)',
            r'(?P<LINK>(?:https?://|www[.]|\w+[@.]\w\w+[@.])\w[\w./?&!%=+*"\'@$#-]+)',
            r'(?P<HASHTAG>[#@][\w-]+)',
            r'(?P<HTML><\w+.*?>|</\w+ *>)',
            r'(?P<PSEUDOHTML>\[/?\w+\])',
            r"(?P<WORD_ELIDED>(?:l|d|n|m|t|s|j|c|ç|lorsqu|puisqu|jusqu|quoiqu|qu|presqu|quelqu)['’´‘′`ʼ])",
            r'(?P<WORD_ORDINAL>\d+(?:ers?|res?|è[rm]es?|i[èe][mr]es?|de?s?|nde?s?|ès?|es?|ᵉʳˢ?|ʳᵉˢ?|ᵈᵉ?ˢ?|ⁿᵈᵉ?ˢ?|ᵉˢ?)\b)',
            r'(?P<HOUR>\d\d?[h:]\d\d(?:[m:]\d\ds?|)\b)',
            r'(?P<NUM>\d+(?:[.,]\d+|))',
            r'(?P<SIGN>[&%‰€$+±=*/<>⩾⩽#|×¥£¢§¬÷@-])',
            r"(?P<WORD>\w+(?:[’'`-]\w+)*)"
        )
}