Grammalecte  Check-in [c8714ac3a1]

Overview
Comment:[fr] ajout de !! à la fin des bookmarks pour éviter la suppression automatique des espaces en fin de ligne
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fr | rg
Files: files | file ages | folders
SHA3-256: c8714ac3a1d21a06baacfdfa8916e5571d498f65df6540358fb0f2c412eb9dcd
User & Date: olr on 2018-06-25 07:20:42
Other Links: branch diff | manifest | tags
Context
2018-06-25
07:24
[build] bookmark display update check-in: 55569dd999 user: olr tags: build, rg
07:20
[fr] ajout de !! à la fin des bookmarks pour éviter la suppression automatique des espaces en fin de ligne check-in: c8714ac3a1 user: olr tags: fr, rg
2018-06-24
19:03
merge trunk check-in: 099647c959 user: olr tags: rg
Changes

Modified gc_lang/fr/rules.grx from [0f58bfdc3c] to [b6224d13ea].

45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
...
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
...
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
...
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
...
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
...
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
...
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
...
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
...
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
...
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
...
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
...
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
...
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
...
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
...
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
...
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
....
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
....
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
....
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
....
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
....
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
....
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
....
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
....
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
....
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
....
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
....
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
....
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
....
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
....
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
....
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
....
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
....
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
....
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
....
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
....
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
....
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
....
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
....
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
....
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
....
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
....
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
....
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
....
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
....
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
....
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
....
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
....
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
....
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
....
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
....
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
....
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
....
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
....
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
....
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
....
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
....
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
....
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
....
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
....
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
....
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
....
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
....
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
....
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
....
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
....
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
....
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
....
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
....
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
....
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
....
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
....
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
....
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
....
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
....
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
....
9919
9920
9921
9922
9923
9924
9925
9926
9927
9928
9929
9930
9931
9932
9933
.....
10076
10077
10078
10079
10080
10081
10082
10083
10084
10085
10086
10087
10088
10089
10090
.....
10094
10095
10096
10097
10098
10099
10100
10101
10102
10103
10104
10105
10106
10107
10108
.....
10264
10265
10266
10267
10268
10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
.....
10279
10280
10281
10282
10283
10284
10285
10286
10287
10288
10289
10290
10291
10292
10293
.....
10424
10425
10426
10427
10428
10429
10430
10431
10432
10433
10434
10435
10436
10437
10438
10439
10440
10441
10442
10443
10444
10445
10446
10447
10448
10449
.....
10561
10562
10563
10564
10565
10566
10567
10568
10569
10570
10571
10572
10573
10574
10575
.....
10599
10600
10601
10602
10603
10604
10605
10606
10607
10608
10609
10610
10611
10612
10613
.....
10660
10661
10662
10663
10664
10665
10666
10667
10668
10669
10670
10671
10672
10673
10674
.....
10694
10695
10696
10697
10698
10699
10700
10701
10702
10703
10704
10705
10706
10707
10708
.....
10807
10808
10809
10810
10811
10812
10813
10814
10815
10816
10817
10818
10819
10820
10821
.....
10849
10850
10851
10852
10853
10854
10855
10856
10857
10858
10859
10860
10861
10862
10863
.....
10942
10943
10944
10945
10946
10947
10948
10949
10950
10951
10952
10953
10954
10955
10956
.....
11138
11139
11140
11141
11142
11143
11144
11145
11146
11147
11148
11149
11150
11151
11152
.....
11267
11268
11269
11270
11271
11272
11273
11274
11275
11276
11277
11278
11279
11280
11281
11282
11283
11284
11285
11286
11287
11288
11289
11290
11291
11292
11293
11294
11295
.....
11322
11323
11324
11325
11326
11327
11328
11329
11330
11331
11332
11333
11334
11335
11336
.....
11382
11383
11384
11385
11386
11387
11388
11389
11390
11391
11392
11393
11394
11395
11396
.....
11438
11439
11440
11441
11442
11443
11444
11445
11446
11447
11448
11449
11450
11451
11452
11453
11454
11455
11456
11457
11458
11459
11460
11461
11462
11463
11464
11465
11466
.....
11596
11597
11598
11599
11600
11601
11602
11603
11604
11605
11606
11607
11608
11609
11610
.....
11749
11750
11751
11752
11753
11754
11755
11756
11757
11758
11759
11760
11761
11762
11763
.....
11822
11823
11824
11825
11826
11827
11828
11829
11830
11831
11832
11833
11834
11835
11836
.....
11866
11867
11868
11869
11870
11871
11872
11873
11874
11875
11876
11877
11878
11879
11880
.....
11886
11887
11888
11889
11890
11891
11892
11893
11894
11895
11896
11897
11898
11899
11900
.....
11933
11934
11935
11936
11937
11938
11939
11940
11941
11942
11943
11944
11945
11946
11947
.....
11950
11951
11952
11953
11954
11955
11956
11957
11958
11959
11960
11961
11962
11963
11964
11965
11966
11967
11968
11969
11970
11971
11972
11973
11974
11975
11976
11977
11978
.....
12009
12010
12011
12012
12013
12014
12015
12016
12017
12018
12019
12020
12021
12022
12023
.....
12142
12143
12144
12145
12146
12147
12148
12149
12150
12151
12152
12153
12154
12155
12156
.....
12263
12264
12265
12266
12267
12268
12269
12270
12271
12272
12273
12274
12275
12276
12277
.....
12411
12412
12413
12414
12415
12416
12417
12418
12419
12420
12421
12422
12423
12424
12425
.....
12454
12455
12456
12457
12458
12459
12460
12461
12462
12463
12464
12465
12466
12467
12468
.....
12487
12488
12489
12490
12491
12492
12493
12494
12495
12496
12497
12498
12499
12500
12501
.....
12591
12592
12593
12594
12595
12596
12597
12598
12599
12600
12601
12602
12603
12604
12605
.....
12843
12844
12845
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855
12856
12857
.....
13143
13144
13145
13146
13147
13148
13149
13150
13151
13152
13153
13154
13155
13156
13157
.....
13220
13221
13222
13223
13224
13225
13226
13227
13228
13229
13230
13231
13232
13233
13234
.....
13299
13300
13301
13302
13303
13304
13305
13306
13307
13308
13309
13310
13311
13312
13313
.....
13429
13430
13431
13432
13433
13434
13435
13436
13437
13438
13439
13440
13441
13442
13443
.....
13451
13452
13453
13454
13455
13456
13457
13458
13459
13460
13461
13462
13463
13464
13465
13466
13467
13468
13469
13470
13471
13472
13473
13474
.....
13542
13543
13544
13545
13546
13547
13548
13549
13550
13551
13552
13553
13554
13555
13556
.....
13604
13605
13606
13607
13608
13609
13610
13611
13612
13613
13614
13615
13616
13617
13618
13619
13620
13621
13622
13623
13624
13625
13626
13627
.....
13645
13646
13647
13648
13649
13650
13651
13652
13653
13654
13655
13656
13657
13658
13659
.....
13669
13670
13671
13672
13673
13674
13675
13676
13677
13678
13679
13680
13681
13682
13683
.....
13692
13693
13694
13695
13696
13697
13698
13699
13700
13701
13702
13703
13704
13705
13706
.....
13731
13732
13733
13734
13735
13736
13737
13738
13739
13740
13741
13742
13743
13744
13745
13746
13747
13748
13749
.....
13800
13801
13802
13803
13804
13805
13806
13807
13808
13809
13810
13811
13812
13813
13814
.....
14576
14577
14578
14579
14580
14581
14582
14583
14584
14585
14586
14587
14588
14589
14590
.....
16641
16642
16643
16644
16645
16646
16647
16648
16649
16650
16651
16652
16653
16654
16655
.....
17013
17014
17015
17016
17017
17018
17019
17020
17021
17022
17023
17024
17025
17026
17027
.....
17557
17558
17559
17560
17561
17562
17563
17564
17565
17566
17567
17568
17569
17570
17571
.....
17657
17658
17659
17660
17661
17662
17663
17664
17665
17666
17667
17668
17669
17670
17671
.....
17703
17704
17705
17706
17707
17708
17709
17710
17711
17712
17713
17714
17715
17716
17717

# ERREURS COURANTES
# http://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Fautes_d%27orthographe/Courantes


!!
!!
!! Options                                                                                          
!!
!!

OPTGROUP/basic: typo apos, esp tab, nbsp unit, tu maj, num virg, nf chim, ocr mapos, liga
OPTGROUP/gramm: conf sgpl gn
OPTGROUP/verbs: infi conj ppas, imp inte vmode
OPTGROUP/style: bs pleo, redon1 redon2, neg
................................................................................
OPTLABEL/debug:     Debug
OPTLABEL/idrule:    Display control rule identifier [!]|Display control rule identifier in the context menu message.



!!
!!
!! Définitions pour les regex                                                                       
!!
!!

# REGEX
DEF: avoir          [aeo]\w*
DEF: etre           [êeésf]\w+
DEF: avoir_etre     [aeêésfo]\w*
................................................................................
!!
!!
!!
!!
!!
!!
!!
!! PASSE 0: PARAGRAPHE PAR PARAGRAPHE                                                               
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!



!!
!!
!!! Espaces & tabulations                                                                           
!!
!!

# Espaces surnuméraires
# Note : les tabulations ne sont pas soulignées dans LibreOffice. Mais l’erreur est bien présente.
__<s>/tab(tab_début_ligne)__           ^[      ]+ <<- ->> ""                   # Espace(s) en début de ligne à supprimer : utilisez les retraits de paragraphe.
__<s>/tab(tab_fin_ligne)__             [       ]+$ <<- ->> ""                  # Espace(s) en fin de ligne à supprimer.
................................................................................
# À partir d’ici, toute règle est susceptible de supprimer des caractères et les remplacer par des espaces ou des chaînes de longueur égale.
#
#


!!!
!!!
!!! Processeur: efface les ponctuations gênantes (URL, sigles, abréviations, IP, heures, etc.)      
!!!
!!!

# e-mail
__<i>(p_email)__
    \w[\w.-]*@\w[\w.-]*\w[.]\w+ <<- ~>> *

................................................................................
TEST: Dossier C:\Program Files (x86)\LibreOffice
TEST: [1] Dossier à revoir.



!!!
!!!
!!! Processeur: balises HTML et LaTeX                                                               
!!!
!!!

# HTML
__<i>/html(p_html_amp_xxx)__            &amp;[a-zA-Z]+; <<- ~>> _
__<i>/html(p_html_lt)__                 &lt; <<- ~>> "   <"
__<i>/html(p_html_gt)__                 &gt; <<- ~>> >
................................................................................
TEST: __html__  des <b>{{homme}}</b>
TEST: __html__  des [b]{{femme}}[/b]



!!
!!
!!!! Écritures épicènes dystypographiques                                                           
!!
!!

# (attention aux modifs: brainfuck d’intensité non négligeable)
# La désambiguïsation est faite lors de la deuxième passe

__[i](typo_écriture_épicène_tous_toutes)__
................................................................................

TEST: je suis {{déconsidéré.e}} par ma hiérarchie.
TEST: il faut en parler à l’{{auteur(e)}} et à son agent.


!!
!!
!!!! Majuscules manquantes                                                                          
!!
!!

# Majuscules après un point
__[s]/maj(majuscule_après_point)__
    ({w_2})[.] ([a-zéàèîçô]\w*)  @@0,$
    <<- not re.search("(?i)^(?:etc|[A-Z]|chap|cf|fig|hab|litt|circ|coll|r[eé]f|étym|suppl|bibl|bibliogr|cit|op|vol|déc|nov|oct|janv|juil|avr|sept)$", \1)
................................................................................
    <<- after("\w\w[.] +\w+") -1>> =\1.capitalize()                                                 # Majuscule en début de phrase, sauf éventuellement lors d’une énumération.

TEST: {{je}} suis disponible quand tu veux. Mais pas aujourd’hui.


!!
!!
!!!! Virgules                                                                                       
!!
!!

# virgules manquantes
__[i>/virg(virgule_manquante_avant_etc)__   {w_1}( etc[.])  @@$ <<- -1>> , etc.                     # Avant « etc. », il faut mettre une virgule.
__[i>/virg(virgule_manquante_avant_car)__
    ({w_1})( car)(?= (?:j[e’]|tu|ils?|nous|vous|elles?|on|les?|l[a’]|ces?|des?|cette|[mts](?:on|a|es))\b)  @@0,$
................................................................................
#__<i>/typo__  ({w_2}) *$   @@0
#    <<- before("[a-zéàùèê][.] ") and not before(r"^(?:\d|\w[.])")
#    -1>> \1.|\1…|\1 !|\1 ?|\1 :|\1 ;|\1,                                               # Il manque une ponctuation finale.


!!
!!
!!!! Espaces manquants                                                                              
!!
!!

__<s>/typo(typo_espace_manquant_après1)__
    ({w1})[,:]({w_1})  @@0,$  <<- not \1.isdigit() -2>> " \2"                                       # Il manque un espace.
__<s>/typo(typo_espace_manquant_après2)__
    [?!;%‰‱˚»}]({w_1})  @@$  <<- -1>> " \1"                                                       # Il manque un espace.
................................................................................
TEST: espace.{{Manquant}}                                                   ->> " Manquant"
TEST: qui ont refuse.{{de}} se sauver                                       ->> " de"
TEST: pic.twitter.com/PICNAME


!!
!!
!!!! Points                                                                                         
!!
!!

# Points superflus
__[i>/typo(typo_et_cetera)__             etc(?:[.]{3,5}|…) <<- ->> etc.                             # Un seul point après « etc. »

TEST: {{etc…}}
................................................................................
TEST: Ligne de points{{...........................}}
TEST: Aujourd’hui, M. Camus va nous lire son texte.



!!
!!
!!!! Tirets                                                                                         
!!
!!

# Tirets, énumérations et dialogues
__<s>/typo(typo_tiret_début_ligne)__    ^[-_][  ] <<- ->> "— |– "           # Dialogues et énumérations : un tiret cadratin ou demi-cadratin, suivi d’un espace insécable, est requis.
__<s>/typo(typo_tiret_dans_dialogue)__  ^ *«[  ](-[  ]) @@$ <<- -1>> "— |– "
    # Dialogues : un tiret cadratin ou demi-cadratin, suivi d’un espace insécable, est requis. (Attention : à moins qu’il s’agisse d’un dialogue inclus dans un autre dialogue, cette manière d’écrire est erronée.)
................................................................................
TEST: {{—}}Viens là.                                                        ->> "— |– "
TEST: Cette phrase contient{{ - }}c’est certain – des tirets d’incise.      ->> " – | — "
TEST: « {{- }}Viens ! On va en finir avec cette affaire, sale fils de pute. ->> "— |– "


!!
!!
!!!! Ponctuations redondantes                                                                       
!!
!!

# virgules et points
__<s>/typo(typo_virgules_points)__ 
    ,[.,]{2,}
    <<- ->> =\0.replace(",", ".").replace("...", "…")                                               # Erreur de numérisation ? Virgules au lieu de points ?

TEST: Ah !{{,.,}} et en quoi consistait le festin ?


__<s>/typo(typo_ponctuation_superflue1)__    , ?([.,;:!?]) @@$ <<- ->> =",|" + \1       # Une de ces ponctuations est superflue.
................................................................................
TEST: Succession : a{{;}} b.                                                ->> " ;"
TEST: C’est assez {{: }}parlez !                                            ->> ": "
TEST: {{» }}C’est ce qu’on croit savoir.                                    ->> "» |« "


!!
!!
!!!! Signes typographiques                                                                          
!!
!!

__<s>/typo(typo_signe_multiplication)__
    (\d+) ?[x*] ?(\d+)  @@0,$ <<- not \0.startswith("0x") ->> \1 × \2                               # Signe de multiplication typographique.

TEST: {{800 x 600}}                                                         ->> 800 × 600
................................................................................

TEST: __liga__ un {{fl}}ottement                                           ->> fl
TEST: __liga__ une belle {{fi}}gure                                        ->> fi


!!
!!
!!!! Apostrophes                                                                                    
!!
!!
## Apostrophe typographique
__[i>/apos(apostrophe_typographique)__
    ([ldsncjmç]|jusqu|lorsqu|aujourd|presqu|quelqu|puisqu|qu|prud|entr)['´‘′`](?=[\w"«]) @@0 <<- ->> \1’    # Apostrophe typographique.
__[i>/apos(apostrophe_typographique_après_t)__
    t['´‘′`](?!ils?|elles?|on)(?=[\w"«]) <<- ->> t’                                                         # Apostrophe typographique.
................................................................................
TEST: Il {{s }}était dit qu’il ne le ferait pas.                                ->> s’
TEST: Je {{m }}étais imaginé que je pourrais pas retrouver cet objet.           ->> m’
TEST: Je {{n }}ai pas retrouvé l’ambiance de mes années de lycée.               ->> n’


!!
!!
!!!! Guillemets typographiques                                                                      
!!
!!

__<s>/typo(typo_guillemets_typographiques_doubles_ouvrants)__
    "(?=\w)
    <<- not before(r"[a-zA-Zéïîùàâäôö]$") ->> « |“                                                  # Guillemets typographiques ouvrants.
__<s>/typo(typo_guillemets_typographiques_doubles_fermants)__
................................................................................
TEST: Le {{'}}grand’ homme.                                                 ->> “|‘|‹
TEST: Le ‘grand{{'}} homme.                                                 ->> ”|’|›
TEST: J’en ai '''marre''' (syntaxe wiki).


!!
!!
!!!! Élisions                                                                                       
!!
!!

__[i]/typo(typo_élision_déterminants)__
    (l[ea] |de )([aâeéêiîoôu]\w+)  @@0,$
    <<- not re.search("(?i)^(?:onz[ei]|énième|iourte|ouistiti|ouate|one-?step|ouf|Ouagadougou|I(?:I|V|X|er|ᵉʳ|ʳᵉ|è?re))", \2) and not \2.isupper() and not morph(\2, ":G", False)
    -1>> =\1[0]+"’"                                         # Élision de l’article devant un mot commençant par une voyelle.|http://fr.wikipedia.org/wiki/Élision
................................................................................
    -1>> cet                                                # Euphonie : « ce » devient « cet » devant un mot commençant par une voyelle.

TEST: {{ce}} animal est dangereux


!!
!!
!!!! Divers                                                                                         
!!
!!

## NF (memo: don’t use flag i)
__[s]/nf(nf_norme_française)__
    [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)
................................................................................
    <<- ->> =\0.replace("2", "₂").replace("3", "₃").replace("4", "₄")                               # Typographie des composés chimiques. [!]

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


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

__<s>/typo(typo_cohérence_guillemets_chevrons_ouvrants)__
    («)[^»“]+?(”)  @@0,$
    <<- not before(r"\w$") -1>> “                                                                   # Guillemet ouvrant différent du guillemet fermant (”).
    <<- not after(r"^\w") -2>> " »"                                                                 # Guillemet fermant différent du guillemet ouvrant («).
................................................................................
TEST: « Je suis là.
TEST: — Oui, nous t’avons vu arriver. »
TEST: « J’en suis “malade”. »


!!
!!
!!!! Espaces insécables avant unités de mesure                                                      
!!
!!

__[s]/unit(unit_nbsp_avant_unités1)__
    ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹]|)) ?)(?:[kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|°C|℃)(?![’'])  @@0,0
    <<- -1>> "\2 "
    # Avec une unité de mesure, mettez un espace insécable.
................................................................................
TEST: 1998 s’annonce grandiose.
TEST: il y en a 3,43 milliards.
TEST: je veux 200 euros.


!!
!!
!!!! Grands nombres                                                                                 
!!
!!

__[s]/num(num_grand_nombre_soudé)__
    \d\d\d\d+
    <<- not before("NF[  -]?(C|E|P|Q|X|Z|EN(?:[  -]ISO|)) *$") >>>
    <<- \0.__len__() > 4 ->> =formatNumber(\0)                                                      # Formatage des grands nombres.
................................................................................
    <<- ~>> =\0.replace(" ", "_")

TEST: Il a perdu {{20 000}} euros à la Bourse en un seul mois.


!!
!!
!!!! Dates                                                                                          
!!
!!
__[i]/date(date_nombres)__
    (?<!\d[ /.-])(\d\d?)[ /.-](\d\d?)[ /.-](\d\d\d+)(?![ /.-]\d)  @@0,w,$
    <<- not checkDate(\1, \2, \3) and not before(r"(?i)\bversions? +$") ->> _                       # Cette date est invalide.
    <<- ~>> =\0.replace(".", "-").replace(" ", "-").replace("\/", "-")

................................................................................
TEST: le {{32.03.2018}}
TEST: le {{81/01/2012}}
TEST: 12-12-2012


!!
!!
!!!! Redondances                                                                                    
!!
!!
__[i]/redon1(redondances_paragraphe)__
    ({w_4})[  ,.;!?:].*[  ](\1)  @@0,$
    <<- not morph(\1, ":(?:G|V0)|>(?:t(?:antôt|emps|rès)|loin|souvent|parfois|quelquefois|côte|petit|même)/", False) and not \1[0].isupper()
    -2>> _                                                      # Dans ce paragraphe, répétition de « \1 » (à gauche).
    <<- __also__ -1>> _                                         # Dans ce paragraphe, répétition de « \1 » (à droite).
................................................................................
TEST: __redon1__ Car parfois il y en a. Mais parfois il n’y en a pas.




!!!
!!!
!!! Processeur: Dernier nettoyage avant coupure du paragraphe en phrases                            
!!!
!!!

# Trait d’union conditionnel (u00AD)
__<i>(p_trait_union_conditionnel1)__    \w+‑\w+‑\w+ <<- ~>> =\0.replace("‑", "")
__<i>(p_trait_union_conditionnel2)__    \w+‑\w+ <<- ~>> =\0.replace("‑", "")

................................................................................
# empêcher la scission en fin de dialogue
__<s>(p_fin_dialogue1)__    ([?!…][?!…  ]*)[ "'”» ]*,  @@0 <<- ~1>> *
__<s>(p_fin_dialogue2)__    ([?!…][?!…  ]*)[ "'”» ]*[a-zéèêîô]  @@0 <<- ~1>> ,

TEST: « Je suis donc perdu ? », dit Paul.
TEST: “C’est bon !”, croit savoir Marie.
TEST: “Parce que… ?” finit par demander Paul.
TEST: « Dans quel pays sommes-nous ? » demanda un manifestant. 


!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!! PASSE 1: PHRASE PAR PHRASE                                                                       
!!
!!
!!
!!
!!
!!
!!
................................................................................
!!
!!

[++]



!!!! Doublons (casse identique)                                                                     

__[s](doublon)__
    ({w1}) {1,3}\1  @@0
    <<- not re.search("(?i)^([nv]ous|faire|en|la|lui|donnant|œuvre|h[éoa]|hou|olé|joli|Bora|couvent|dément|sapiens|très|vroum|[0-9]+)$", \1)
        and not (re.search("^(?:est|une?)$", \1) and before("[’']$"))
        and not (\1 == "mieux" and before("(?i)qui +$"))
    ->> \1   # Doublon.

TEST: Il y a un {{doublon doublon}}.


!!!! Nombres: typographie                                                                           

#(\d\d\d\d)-(\d\d\d\d)   <<- ->> \1–\2                              # Ne pas séparer deux dates par un trait d’union, mais par un tiret demi-cadratin.

__[s]/num(num_lettre_O_zéro1)__  [\dO]+[O][\dO]+ <<- not option("ocr") ->> =\0.replace("O", "0")    # S’il s’agit d’un nombre, utilisez le chiffre « 0 » plutôt que la lettre « O ».
__[s]/num(num_lettre_O_zéro2)__  [1-9]O <<- not option("ocr") ->> =\0.replace("O", "0")             # S’il s’agit d’un nombre, utilisez le chiffre « 0 » plutôt que la lettre « O ».

TEST: année {{2O11}}                                                      ->> 2011
................................................................................
TEST: le {{IInd}} siècle                        ->> IIᵈ
TEST: le {{VIième}} siècle                      ->> VIᵉ
TEST: Le {{XXIème}} siècle.                     ->> XXIᵉ
TEST: le {{XXè}} siècle.                        ->> XXᵉ



!!!! Écritures épicènes invariables                                                                 

__[i](d_typo_écriture_épicène_pluriel)__
    ({w_1}[éuitsrn])_(?:[nt]|)e_s  @@0
    <<- morphex(\1, ":[NAQ]", ":G") =>> define(\1, [":N:A:Q:e:p"])

__[i](d_typo_écriture_épicène_singulier)__
    ({w_2}[éuitsrn])_e  @@0
    <<- morph(\1, ":[NAQ]", False) =>> define(\1, [":N:A:Q:e:s"])


!!!! Dates                                                                                          

__[i]/date(date_jour_mois_année)__
    (\d\d?) (janvier|février|ma(?:rs|i)|a(?:vril|o[ûu]t)|jui(?:n|llet)|septembre|octobre|novembre|décembre) (\d\d\d+)  @@0,w,$ 
    <<- not checkDateWithString(\1, \2, \3) ->> _                                                   # Cette date est invalide.

TEST: {{29 février 2011}}


__[i]/date(date_journée_jour_mois_année1)__
    (lundi|m(?:ardi|ercredi)|jeudi|vendredi|samedi|dimanche),? (?:le |)(\d\d?)-(\d\d?)-(\d\d+)  @@0,w,w,$ 
    <<- not after(r"^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(\1, \2, \3, \4)
    -1>> =getDay(\2, \3, \4)                                                                        # Le jour de la date suivante est incorrect.

TEST: {{mercredi}}, le 10-06-2014                                         ->> mardi


__[i]/date(date_journée_jour_mois_année2)__
    (lundi|m(?:ardi|ercredi)|jeudi|vendredi|samedi|dimanche),? (?:le |)(\d\d?) (janvier|février|ma(?:rs|i)|a(?:vril|o[ûu]t)|jui(?:n|llet)|septembre|octobre|novembre|décembre) (\d\d+)  @@0,w,w,$ 
    <<- not after(r"^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDayWithString(\1, \2, \3, \4)
    -1>> =getDayWithString(\2, \3, \4)                                                              # Le jour de la date suivante est incorrect.

TEST: {{mercredi}}, le 10 juin 2014                                       ->> mardi
TEST: {{lundi}}, 18 août 1912                                             ->> dimanche
TEST: lundi, 18 août 1912 avant Jésus-Christ (date imaginaire)


__[i]/date(date_mois_31)__ 31 (avril|juin|septembre|novembre)  @@3
    <<- ->> 30 \1                                                                                   # Cette date est invalide. Il n’y a que 30 jours en \1. 

TEST: le {{31 avril}}


__[i]/date(date_février)__ 3[01] février
    <<- ->> 28 février|29 février                                                                   # Cette date est invalide. Il n’y a que 28 ou 29 jours en février. 

TEST: le {{30 février}}



!!!
!!!
!!! Processeur: épuration des signes inutiles et quelques simplifications                           
!!!
!!!

# fin de phrase
__<s>(p_fin_de_phrase)__        [.?!:;…][ .?!… »”")]*$  <<- ~>> *

# début de phrase
................................................................................
__[i](p_références_aux_notes)__ [a-zéèâàôîù][a-zéèâàôîù-]+(\d+) @@$ <<- not morph(\0, ":", False) ~1>> *

# faux positifs avec adverbes de négation
__[i](p_pas_mal)__              pas mal <<- not morph(word(-1), ":D", False) ~>> *
__[i](p_pas_assez)__            pas assez ({w_2}) @@$ <<- morph(\1, ":A", False) and not morph(word(-1), ":D", False) ~>> *

# faux positifs avec «à chez»
__[i](p_de_chez_à_chez_pronom)__    de chez \w+ (?:à|jusqu à) chez (?:moi|toi|lui|elles?|eux|nous|vous) <<- ~>> * 
__[i](p_de_chez)__                  (jusqu à|de) chez @@0 <<- ~1>> *

# faux positifs
__[i](p_en_tout_et_pour_tout)__ en tout et pour tout <<- ~>> *
__[i](p_au_sortir_de)__         au (sortir) de?s?  @@3 <<- ~1>> *
__[i](p_au_revoir)__            au revoir <<- ~>> au_revoir

................................................................................


TEST: New York {{étaient}} {{devenue}} la plaque tournante de tous les trafics.


!!
!!
!!!! Traits d’union                                                                                 
!!
!!

__<i]/tu(tu_t_euphonique_incorrect)__
    ([-–—− ]t(?:[’' ][-–—−]?|[-–—−][’' ]?))(ils?|elles?|on|tu)  @@0,$
    <<- re.search("(?i)^(?:ils|elles|tu)$", \2) -1>> -      # Le “t” euphonique n’est pas nécessaire avec “\2”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?T1=t+euphonique&id=2513
    <<- __else__ and \1 != "-t-" and \1 != "-T-" -1>> -t-   # Pour le “t” euphonique, il faut deux traits d’union. Pas d’apostrophe. Pas d’espace.
................................................................................

TEST: Cet {{in folio}} est incroyable.
TEST: c’est {{in}} stage de réinsertion.
TEST: Dans ce drive in douze hommes mangent.


__[i]/tu(tu_préfixe_mi)__
    mi ({w2}) @@$  <<- morph(\1, ":[NAQ]", False) ->> mi-\1                                         # S’il s’agit d’un seul mot, il manque un trait d’union.    

TEST: J’ai été engagé pour un {{mi temps}}.


__[i]/tu(tu_préfixe_quasi)__
    (?:l(?:es?|a|eurs?)|ce(?:tte|t|s|)|des?|m(?:a|on|es)|[ts](?:es|a)) (quasi ({w1}))  @@$,$ 
    <<- morphex(\2, ":N", ":[AGW]") -1>> quasi-\2                                                   # Il manque un trait d’union : « quasi » s’accroche au mot qui le suit s’il s’agit d’un nom.
    <<- ~1>> \2

TEST: leurs {{quasi indifférences}}


__[i]/tu(tu_préfixe_semi)__
................................................................................
__[i]/tu(tu_là_adverbe)__       là (bas|haut|desso?us|dedans|devant|derrière) @@3 <<- ->> là-\1     # Il manque un trait d’union.
__[i]/tu(tu_n_est_ce_pas)__             n’est(?: ce[ -]pas|-ce-pas) <<- ->> n’est-ce pas            # Un trait d’union.
__[i]/tu(tu_nord_sud_ouest)__           (nord|sud) ouest @@0 <<- ->> \1-ouest                       # Il manque un trait d’union.
__[i]/tu(tu_nord_sud_est)__             (nord|sud) est @@0 <<- isEnd() ->> \1-est                   # Il manque un trait d’union.
__[i]/tu(tu_outre_mer)__                outre mer <<- ->> outre-mer                                 # Il manque un trait d’union.
__[i]/tu(tu_ouï_dire)__                 ou[iï] dire <<- morph(word(-1), ":G") ->> ouï-dire          # Il manque un trait d’union.
__[i]/tu(tu_par_préposition)__
    par (desso?us|devant|delà|derrière|dehors|dedans|devers)  @@$ 
    <<- ->> par-\1                                                                                  # Il manque un trait d’union.
__[i]/tu(tu_par_ci_par_là)__            par ci,? par là <<- ->> par-ci par-là|par-ci, par-là        # Trait(s) d’union manquant(s).
__[i]/tu(tu_prêt_à_porter)__
    (prêts?) à porter  @@0 
    <<- before(r"(?i)\b(?:les?|du|des|un|ces?|[mts]on) +") ->> \1-à-porter                          # Il manque les traits d’union.
__[i]/tu(tu_plate_forme)__  plates? formes? <<- ->> plate-forme|plates-formes|plateforme|plateformes    # Il manque un trait d’union. Vous pouvez aussi souder les deux mots.
__[i]/tu(tu_quelques_uns_unes)__       quelques (une?s) @@$ <<- ->> quelques-\1                     # Il manque un trait d’union.
__[i]/tu(tu_plus_moins_values)__       (plus|moins) (values?)  @@0,$  <<- ->> \1-\2                 # Il manque un trait d’union.
__[i]/tu(tu_rez_de_chaussée)__         rez de chaussées? <<- ->> rez-de-chaussée                    # Il manque un trait d’union.
__[i]/tu(tu_science_fiction)__         science fiction <<- ->> science-fiction                      # Il manque un trait d’union.
__[i]/tu(tu_stock_option)__            stock options? <<- ->> =\0.replace(" ", "-")                 # Il manque un trait d’union.
................................................................................
TEST: on a fait {{à la va vite}}…
TEST: marre de faire des {{allers retours}}
TEST: {{le}} {{bouche à oreille}}
TEST: à ce {{moment là}}                                                        ->> moment-là
TEST: une {{plus value}}                                                        ->> plus-value
TEST: Il est {{en-dessous}} de tout.                                            ->> en dessous
TEST: Ils sont {{en-deçà}} de tout                                              ->> en deçà
TEST: {{Là bas}}.                                                               ->> Là-bas 
TEST: {{Au dessus}}                                                             ->> Au-dessus
TEST: {{ci dessus}}                                                             ->> ci-dessus
TEST: {{par dessus}}                                                            ->> par-dessus
TEST: {{au delà}}                                                               ->> au-delà
TEST: {{ci devant}}.                                                            ->> ci-devant
TEST: Il faisait froid cet {{hiver la}}.                                        ->> hiver-là
TEST: {{Ceux la}} vont à la pêche.                                              ->> Ceux-là
................................................................................
__[u]/tu(tu_Nouveau_Brunswick)__        Nouveau Brunswick <<- ->> Nouveau-Brunswick                     # Il manque un trait d’union.
__[u]/tu(tu_Nouvelle_Qqch)__            Nouvelle (Zélande|Calédonie|Orléans) @@$ <<- ->> Nouvelle-\1    # Il manque un trait d’union.
__[u]/tu(tu_Pas_de_Calais)__            Pas de Calais <<- ->> Pas-de-Calais                             # Il manque les traits d’union.
__[u]/tu(tu_Rhône_Alpes)__              Rhône Alpes <<- ->> Rhône-Alpes                                 # Il manque les traits d’union.
__[u]/tu(tu_Saône_et_Loire)__           Saône et Loire <<- ->> Saône-et-Loire                           # Il manque un trait d’union.
__[u]/tu(tu_Jésus_Christ)__             Jésus Christ <<- ->> Jésus-Christ                               # Il manque un trait d’union.
__[u]/tu(tu_Jean_prénom)__
    Jean (Baptiste|Claude|François|Jacques|Louis|Luc|Marc|Marie|Michel|Paul|Philippe|Pierre)  @@$ 
    <<- ->> Jean-\1                                                                                 # Il manque un trait d’union.
__[u]/tu(tu_Marie_Prénom)__
    Marie (Ange|Agnès|Anne|Antoinette|Cécile|Chantal|Charlotte|Christine|Claire|Claude|Dominique|France|Françoise|Hélène|Jeanne|José|Josèphe|Line|Louise|Madeleine|Noëlle|Odile|Paule|Pierre|Rose|Thérèse)  @@$ 
    <<- ->> Marie-\1                                                                                # Il manque un trait d’union.
__[s]/tu(tu_St_Ste_Bidule)__
    ((Ste?) )[A-ZÉÈÎ]\w+ @@0,0
    <<- -1>> \2-
    # Il manque un trait d’union s’il s’agit d’une église, d’une cité, d’une communauté… S’il s’agit d’une personne, écrivez « saint(e) » sans majuscule, sans trait d’union.

TEST: Émigrer au {{Royaume Uni}}
................................................................................
    lors que?
    <<- not before(r"(?i)\bd[eè]s +$") ->> =\0.replace(" ", "")                                     # Attachez les deux mots.|https://fr.wiktionary.org/wiki/lorsque

TEST: Elle y arriva {{lors qu}}’elle trouva l’astuce permettant l’ouverture de la porte.
TEST: Dès lors qu’on sait comment s’y prendre, aucune raison de faillir.


!!!! Virgules                                                                                       

# Dialogues
__[u]/virg(virgule_dialogue_après_nom_propre)__
    ([A-ZÉÈ][\w-]+) (\w+-(?:moi|toi|l(?:ui|a|e(?:ur|s|))|nous|vous|je|tu|ils|elles))  @@0,$
    <<- morphex(\1, ":M", ":G") and not morph(\2, ":N", False) and isStart()
    -1>> \1,                                                                        # Dialogue ? Ajoutez une virgule pour mettre en incise la personne à qui s’adresse la réplique.

................................................................................

TEST: Tu vas les {{donner}} Rachel.
TEST: Il va la {{tuer}} Paul.
TEST: Cependant les promesses n’engagent que ceux qui les croient, comme aimait à le dire Jacques Chirac.



!!!! Apostrophe manquante (2)                                                                       

__<s>/typo(typo_apostrophe_manquante_audace2)__
    ^ *([LDSNCJMTÇ] )[aeéiouhAEÉIOUHyîèêôûYÎÈÊÔÛ]  @@*
    <<- option("mapos") -1>> =\1[:-1]+"’"                                                           # Il manque peut-être une apostrophe.

TEST: __mapos__ {{L }}opinion des gens, elle s’en moquait.



!!!! A / À: accentuation la préposition en début de phrase                                          

__<s]/typo(typo_À_début_phrase1)__
    ^ *(A) (?!t[’-](?:ils?|elles?|on))({w_2})  @@*,$
    <<- morphex(\2, ":[GNAY]", ":(?:Q|3s)|>(?:priori|post[eé]riori|contrario|capella|fortiori)/")
        or (\2 == "bientôt" and isEnd())
    -1>> À                                                                                          # S’il s’agit de la préposition « à », il faut accentuer la majuscule.
__<s>/typo(typo_À_début_phrase2)__
................................................................................
TEST: — {{A}} t’emmener loin de tout ceci.
TEST: {{A}} bientôt, mon ami.
TEST: A bientôt fini son devoir.
TEST: A priori, nul ne peut y parvenir sans une aide extérieure.
TEST: A devient notre meilleure chance d’y parvenir.


!!!! Accentuation des majuscules                                                                    

__[u]/maj(maj_accents)__
    E(?:tat|glise|co(?:le|nomie)|quipe|lectri(?:cité|que)|gal(?:ité|ement)|té)s? @@1
    <<- ->> ="É"+\0[1:]                                                                            # Accentuez les majuscules.
    <<- ~>> ="É"+\0[1:]

TEST: Le budget de l’{{Etat}}.



!!!
!!!
!!! Désambiguïsation                                                                                
!!!
!!!

# mots grammaticaux
__[i](d_dans)__
    dans
    <<- not morph(word(-1), ":D.*:p|>[a-z]+ièmes/", False, False) =>> select(\0, ":R")
................................................................................
TEST: elle finit par être très fière de son fils.




!!
!!
!!!! OCR                                                                                            
!!
!!

# ?
__<s]/ocr(ocr_point_interrogation)__
    [  ]7
    <<- after0("^(?: +[A-ZÉÈÂ(]|…|[.][.]+| *$)") ->> " ?"                                           # Erreur de numérisation ?
................................................................................
TEST: __ocr__ trouve {{l£}} temps
TEST: __ocr__ elle s’{{avance*}} sur le seuil
TEST: __ocr__ par beaucoup d’argent ? {{{Il}} débouche le Jack Daniels


!!
!!
!!!! Incohérences de base                                                                           
!!
!!

### double négation
__[i](double_négation)__
    pas (personne|aucune?|jamais)  @@4
    <<- not morph(word(-1), ":D:[me]" ,False, False) ->> \1|pas, \1
................................................................................

TEST: je ne sais {{des}} {{ses}} choses.



!!
!!
!!!! Style                                                                                          
!!
!!

#__bs__  Mr <<- ->> M.                          # M. est l’usage courant pour “Monsieur”. « Mr » est l’abréviation ancienne, française.

# à / en
__[i]/bs(bs_en_à_ville)__
................................................................................
#Se rappelle de l’amour

#enjoindre à qqn de faire qqch


!!
!!
!!!! Pléonasmes                                                                                     
!!
!!

__[i]/pleo(pleo_abolir)__               (abol\w+) (?:absolument|entièrement|compl[èé]tement|totalement) @@0 <<- morph(\1, ">abolir/", False) ->> \1         # Pléonasme.
__[i]/pleo(pleo_acculer)__              (accul\w+) aux? pieds? du mur @@0 <<- morph(\1, ">acculer/", False) ->> \1                                          # Pléonasme.
__[i]/pleo(pleo_achever)__              (ach[eè]v\w+) (?:absolument|entièrement|compl[èé]tement|totalement) @@0 <<- morph(\1, ">achever/", False) ->> \1    # Pléonasme.
__[i]/pleo(pleo_en_cours)__             actuellement en cours <<- not after(r" +de?\b") ->> en cours                                            # Pléonasme.
................................................................................
TEST: {{ta}} aimée                                            ->> ton
TEST: {{ma}} obligée                                          ->> mon
TEST: Ce couple va donner à la France sa très importante collection qui rejoindra le musée d’Orsay


!!
!!
!!!! Confusions                                                                                     
!!
!!

__[s>/conf(conf_ne_n)__     [nN]e n’                        <<- ->> ne m’|n’                        # Incohérence. Double négation.
__[s>/conf(conf_pronoms1)__ [mtMT]e ([nmst](?:’|e )) @@$    <<- ->> \1                              # Incohérence.
__[s>/conf(conf_pronoms2)__ [sS]e ([mst](?:’|e )) @@$       <<- ->> \1                              # Incohérence.
__[s>/conf(conf_de_d)__     [dD][eu] d’(?![A-ZÉÂÔÈ])        <<- ->> d’                              # Incohérence. 

TEST: Il {{ne n’}}arrive jamais à l’heure.
TEST: Ça {{me te }}prend la tête, toutes ces complications vaines.
TEST: il {{se m’}}est difficile d’y parvenir.
TEST: Ça t’arrive {{de d’}}arriver à l’heure ?
TEST: Les écrits de d’Alembert.

................................................................................
TEST: toute chose pourrait finalement advenir indifféremment en n’importe quel point du globe


__[i]/conf(conf_malgré_le_la_les_leur)__
    malgré l(?:es? +|eurs? +|a +|’)({w_3})  @@$
    <<- morphex(\1, ":", ":[GNAWMB]") -1>> =suggSimil(\1, ":[NA]", True)                             # Incohérence : après “malgré”, on devrait trouver un groupe nominal.

TEST: malgré l’{{arrête}} qui interdisait le port 
TEST: malgré les deux précédentes erreurs


__[i]/conf(conf_ma_ta_cette_verbe)__
    ([mt]a|cette) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:[fe]:[si]", True)                                                    # Incohérence avec « \1 » : « \2 » est un verbe.
................................................................................

# Trop de faux positifs
#__[i]/conf__
#    très +(bien|\w+ent) +({w2})  @@w,$
#    <<- morph(\1, ":W", False) and morphex(\2, ":[123][sp]", ":[GAQW]") -2>> _
#    # Incohérence avec « très » : « \2 » n’est ni un adjectif, ni un participe passé, ni un adverbe.

 
__[i]/conf(conf_très_verbe)__
    très +(?!envie)({w_2})  @@$
    <<- morphex(\1, ":(?:Y|[123][sp])", ":[AQW]") -1>> =suggSimil(\1, ":[AW]", True)                # Incohérence avec « très » : « \1 » n’est ni un adjectif, ni un participe passé, ni un adverbe.
    <<- morph(\1, ">jeûne/", False) -1>> =\1.replace("û", "u")                                      # Confusion. Le jeûne est une privation de nourriture.|https://fr.wiktionary.org/wiki/jeune

TEST: Il est très {{cite}}.
TEST: très {{suivit}} par ce détective
................................................................................
    (à les) ({w_2})  @@0,6  <<- morphex(\2, ":[NAQ]", ":(?:Y|Oo)") -1>> a les|aux
    # Confusion. Ou vous confondez “a” (préposition) avec “a” (avoir), ou vous devez employer “aux”. Exemple : Elle _a_ donné du travail _aux_ employés _à_ profusion.
__[i]/conf(conf_a_à_au_aux)__
    (à) aux?(?! (?:moins|plus)) @@0 <<- -1>> a                                                      # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez :
__[i]/conf(conf_a_à_base_cause)__
    (a) (?:base|cause) d(?:es?|u|) @@0 <<- not before(r"(?i)\bce que?\b") -1>> à                    # Confusion. Utilisez la préposition « à ».
__[i]/conf(conf_a_à_faim_peur_honte_soif)__
    (à) +(?:faim|peur|honte|soif) @@0 <<- -1>> a                                                    # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez : 
__[i]/conf(conf_a_à_part)__
    (a) part ({w1}) @@0,7 <<- morph(\2, ":(?:M[12]|D|Oo)") -1>> à                                   # Confusion probable.
__[i]/conf(conf_a_à_les_à)__
    les (à)(?! côtés| peu près| prioris?| post[eé]rioris?| valoirs?| pics?| propos) @@4 <<- -1>> a
    # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez : 
__[i]/conf(conf_a_à_avant_conj_prep)__
    (à) +(?:a(?:fin|lors|près|uprès|ux?(?! moins| plus| mieux)|vant|vec)|au-de(?:dans|hors|là|sso?us|vant)|chez|d(?:ans|evant|ès|déjà|onc|urant)|lorsque?|malgré|par(?:ce|mi|)|p(?:endant|our|uisque)|que?|sur|tandis)  @@0
    <<- -1>> a                                                                                      # Confusion probable : “à” est une préposition. Écrivez “a” pour la conjugaison de “avoir”.
__[i]/conf(conf_a_participe_passé_ou_vconj)__
    (à) +({w_2})  @@0,$
    <<- \2.islower() and \2 != "coté" >>>
    <<- morphex(\2, ":(?:V.......[_z][az].*:Q|V1.*:Ip:2p)", ":[MGWNY]") -1>> a                      # Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez :
................................................................................
    -1>> à                  # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
__[s]/conf(conf_a_à_locutions4)__
    (a) (?:[mts](?:es|on|a)|[nv]o(?:s|tre)|leurs?) (?:avis|c(?:onnaissance|ôtés)|c(?:œur|orps) défendant|dé(?:pens|triment)|disposition|encontre|égard|grand(?: désarroi|e (?:surprise|tristesse))|guise|insu|portée|risques et périls|sujet|tour)  @@0
    <<- not before(r"(?i)(?:\bque? |[ln]’$|(?<!-)\b(?:il|elle|on|y|n’en) +$)")
    -1>> à                  # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
__[s]/conf(conf_a_à_infi)__
    (?<![mtn]’)(a) (?:[mts](?:’(?:en +|y +|)|e +)|[nv]ous|)({w_2}(?:er|re|ir))  @@0,2
    <<- morph(\2, ":Y", False) and not before(r"(?i)\bque? |(?:il|elle|on|n’(?:en|y)) +$") 
    -1>> à                  # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
__[s]/conf(conf_a_à_après_interrogative)__
    \w+-(?:je|ils?|elles?|je|tu|on|vous|nous) (a)(?! priori| posteriori| fortiori)  @@$
    <<- -1>> à              # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0


TEST: Cette femme {{à}} été confondue avec une autre.
................................................................................
__[i]/conf(conf_golf)__
    (champion(?:ne|nat|)s?|clubs?|joueu(?:r|se)s?|parcours|sacs?|balles?|terrains?|tournois?|compétitions?|passionnée?s?|écoles?|professeurs?|parties?|professionnel(?:le|)s?|amateure?s?|stages?|journées?|après-midi|matinées?|heures?|fédérations?|fans?) de (golfe)  @@0,$
    <<- -2>> golf                                                           # Confusion. Le golfe est une zone de mer ou d’un lac avancée dans les terres. Ex : Le golfe Persique.
__[i]/conf(conf_golfe)__
    (golf) (persique|d[ue] (?:Bengale|Botnie|Gascogne|Gabès|Guinée|Lion|Morbihan|Mexique|Porto|Saint-Laurent|Thaïlande|Tonkin|Tunis|Winam)|d’(?:Aden|Ajaccio|Alaska|Hammamet))  @@0,$
    <<- -1>> golfe                                                          # Confusion. Le golf est un sport.
__[i]/conf(conf_Golfe)__
    (?:guerre|émir|monarchie)s? du (golf) @@$ <<- -1>> Golfe                # Confusion. Le golf est un sport.             

TEST: Il a réalisé un documentaire sur la guerre du {{Golf}}.
TEST: C’est un bon joueur de {{golfe}}.
TEST: Le {{golf}} Persique est presque une mer fermée.
TEST: J’ai fait de la voile dans le {{golf}} du Morbihan.
TEST: Le {{golf}} d’Aden.


# haut delà / au-delà
__[i]/conf(conf_au_delà)__      haut[- ]del[àa] <<- ->> au-delà             # Confusion. 

TEST: il va dans l’{{haut delà}}


# héro / héros
__[i]/conf(conf_héros)__
    (?:le|quel|cet?|un|du|au) (héro) @@$
................................................................................
    ^ *(?:il|ce) (peut-être) @@$
    <<- -1>> peut être                                                      # Confusion probable : « peut-être » signifie « possiblement ».
__[i]/conf(conf_cela_peut_être_adj)__
    ^ *(?:cela|ceci) (peut-être) ({w_2})  @@w,$
    <<- morph(\2, ":[AQ]", False) -1>> peut être                            # Confusion probable : « peut-être » signifie « possiblement ».
__[i]/conf(conf_peu_à_peu)__
    peu[xt]? a peu[xt]?
    <<- ->> peu à peu                                                       # Confusion : « peu à peu » ou « petit à petit ». 
__[i]/conf(conf_peu_importe)__
    (peu[tx]) importe(?:nt|) @@w
    <<- morph(word(-1), ":C", False, True) -1>> peu                         # Confusion : « \1 » est une conjugaison de “pouvoir”, utilisez “peu” pour dire “pas beaucoup”.
__[i]/conf(conf_adv_de_peu)!6__
    (?:très|trop|de|quelque|pour|à) (peu[tx]) @@$
    <<- -1>> peu                                                            # Confusion : « \1 » est une conjugaison de “pouvoir”, utilisez “peu” pour dire “pas beaucoup”.
__[i]/conf(conf_un_peu)!6__
................................................................................
TEST: être rassuré quant à l’avenir du continent européen
TEST: il comprit trop tard qu’en elle naquit alors le doute qui l’éloigna de lui à jamais.
TEST: Quand à mon tour je réalise l’imposture, c’est trop tard.


# quand bien même
__[i]/conf(conf_quand_bien_même)__
    combien même <<- not after("^ si ") ->> quand bien même                                         # Locution conjonctive.|https://fr.wiktionary.org/wiki/quand_bien_m%C3%AAme                             

TEST: J’irai, {{combien même}} vous seriez tous contre moi.
TEST: Il partirait en guerre quand bien même devrait-il être tout seul.
TEST: Elle veut savoir combien même si ça ne lui est d’aucune utilité immédiate.


# qu’elle / quelle
................................................................................

# tant / temps (1re partie)
__[i]/conf(conf_en_temps_de)__
    en (tant?) de?  @@3
    <<- not after("^[ ’](?:lieux|endroits|places|mondes|villes|pays|régions|cités)") -1>> temps     # Confusion. Écrivez « en temps de » si vous évoquez une période de temps.
__[i]/conf(conf_de_temps_en_temps)__    de tant? en tant?                   <<- ->> de temps en temps   # Confusion. Écrivez « de temps en temps ».
__[i]/conf(conf_un_temps_soit_peu)__    un (temps|tan) soi[tes]? peu  @@3   <<- -1>> tant           # Confusion. Écrivez « un tant soit peu ».
__[i]/conf(conf_tant_de)__              a(?:près|vec) (temps|tan) de?  @@w  <<- -1>> tant           # Confusion.|http://fr.wiktionary.org/wiki/tant 
__[i]/conf(conf_à_temps_partiel)__      [àa] (tant?) (?:partiel|plein)s? @@2 <<- -1>> temps         # Confusion.
__[i]/conf(conf_en_même_temps)__        en mêmes? (tant?)  @@$              <<- -1>> temps          # Confusion.

TEST: en {{tant}} de guerre, il faut savoir faire face et ne pas faiblir face à l’adversité.
TEST: ils vont {{de tan en tan}} au restaurant
TEST: un {{temps}} soit peu perdu dans cette affaire.
TEST: après {{temps}} de souffrance, il faut savoir lâcher prise.
................................................................................


# voire / voir
__[i]/conf(conf_voir_voire)__
    (voir) ({w_2}) @@0,$
    <<- not re.search("^(?:grand|petit|rouge)$", \2) and morphex(\2, ":A", ":[NGM]") and not \2.istitle()
        and not before(r"(?i)\b[ndmts](?:e |’(?:en |y ))(?:pas |jamais |) *$") and not morph(word(-1), ":O[os]|>(?:[ndmts]e|falloir|pouvoir|savoir|de)/", False)
    -1>> voire 
    # Confusion probable : “voir” est un verbe concernant la perception visuelle. Pour signifier “et même possiblement”, écrivez :|https://fr.wiktionary.org/wiki/voire

__[i]/conf(conf_voire_voir)__
    voire
    <<- morph(word(-1), ":Cs|>(?:ni|et|sans|pour|falloir|[pv]ouvoir|aller)/", True, False) ->> voir
    # Confusion probable : “voire” signifie “et même possiblement”. Pour le verbe, écrivez “voir”.|https://fr.wiktionary.org/wiki/voire

................................................................................
TEST: car elles pénètrent dans les poumons voire le système sanguin.
TEST: des enfants malades, qui préfèrent souvent voir Dark Vador que des vieux clowns un peu flippants.



!!
!!
!!!! Pronoms + incohérences                                                                         
!!
!!
__[i](p_m_enfin)__      m’enfin <<- ~>> *

__[i]/conf(conf_j_y_en_qqch)__
    (j’(?:en +|y +|))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|O[onw])")
................................................................................
#__[i](p_notre_père_qui_es_au_cieux)__   notre père (qui est? aux cieux) @@11 <<- ~1>> *


@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: graphe1                                                                                  
@@@@
@@@@
@@@@
@@@@

__p_notre_père_qui_es_au_cieux__
    notre père qui [es|est] aux cieux
        <<- ~4>> !
        <<- ~3:0>> _


!!
!!
!!!! Formes verbales sans sujet                                                                     
!!
!!

__tag_sujets__
    [je|j’]
    [moi|moi-même] qui
    [moi|moi-même] [seul|seule]
................................................................................
TEST: Mon épouse et moi-même avons toujours dit
TEST: que vous ou moi ignorions à peu près tout du boson de Higgs n’a pas du tout le même sens



!!
!!
!!!! Locutions invariables                                                                          
!!
!!

__locutions_invariables__
    [plus|moins|autant]  que  [prévue|prévus|prévues]
        <<- -3>> prévu                                                                              # Invariable. Implicitement, \1 que ce qui était prévu.

................................................................................
TEST: il y en a moins que {{prévues}}                         ->> prévu
TEST: comme {{convenus}}                                      ->> convenu



!!
!!
!!!! Tout, tous, toute, toutes                                                                      
!!
!!

__purge_tout_tous_toutes__
    [fais-les|fais-nous]                        [tous|toutes]
    [faisons-les|faisons-nous|faisons-vous]     [tous|toutes]
    [faites-les|faites-nous|faites-vous]        [tous|toutes]
................................................................................
TEST: aux tout débuts, il y eut bien des erreurs
TEST: comment les inégalités sociales impactent la santé des tout petits



!!
!!
!!!! Adverbes de négation                                                                           
!!
!!

__ne_manquant__
    [<start>|,]  je             [le|la|l’|les|me|m’|te|t’|se|s’|nous|vous|lui|leur]     @:1s¬:(?:Oo|X)  [pas|rien|jamais|guère|point]
    [<start>|,]  tu             [le|la|l’|les|me|m’|te|t’|se|s’|nous|vous|lui|leur]     @:2s¬:(?:Oo|X)  [pas|rien|jamais|guère|point]
    [<start>|,]  [il|elle|on]   [le|la|l’|les|me|m’|te|t’|se|s’|nous|vous|lui|leur]     @:3s¬:(?:Oo|X)  [pas|rien|jamais|guère|point]
................................................................................
TEST: __neg__ Il {{y}} a jamais d’eau.
TEST: __neg__ je {{deviendrai}} pas hargneux.
TEST: __neg__ il {{le}} lui donne pas souvent.


!!
!!
!!!! Infinitif                                                                                      
!!
!!

__infi_ne_pas_jamais_etc__
    ne [pas|rien|guère|point]                   ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  (@:[VNA]¬:(?:Y|W|X|O[ow])|>que?/)
    ne [pas|rien|guère|point] [trop|beaucoup]   ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  (@:[VNA]¬:(?:Y|W|X|O[ow])|>que?/)
    ne [pas|rien|guère|point] non plus          ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  (@:[VNA]¬:(?:Y|W|X|O[ow])|>que?/)
................................................................................
    bien assez tôt
    bien des fois
    bien souvent
    bon gré ?,¿ mal gré
    bras dessus ?,¿ bras dessous
    çà et là
    ce faisant
    [cela|ça|ceci] mis à part 
    [cela|ça|ceci] va sans dire
    ces derniers temps
    cette [fois-là|fois-ci]
    chaque fois
    comme avant
    comme autrefois
    comme d’ habitude
................................................................................
    vaille que vaille
    ventre à terre
    vers nulle part
        <<- ~>> *


@@@@
@@@@END_GRAPH                                                                                       
@@@@

 
__[i](p_plus_avant)__           plus avant(?! de | que?) <<- ~>> *


__[i](p_qui_loc_tps)__          qui (ce (?:jour|matin|après-midi|soir)-là|cette (?:nuit|matinée|soirée)-là) @@4 <<- ~1>> *    


    


TEST: ils vont et viennent, toujours {{cotes a cotes}}…
TEST: Nous irons {{tours à tours}} chercher du bois.
TEST: Ma thèse en 180 secondes.


# je / tu / il / elles / nous / vous / ils / elles 
__[i](p_je_vous_en_prie)__      je (?:t’en|vous en) (?:prie|supplie) <<- ~>> *
__[i](p_nous_vous_en_prions)__  nous (?:t’en|vous en) (?:prions|supplions) <<- ~>> *

# mot-là
__[i](p_qqch_tiret_là)__        ({w1})(-là) @@0,$ <<- morphex(\1, ":[NAQ]", ":G") ~2>> *

# Après
................................................................................
__[i](p_de_mes_yeux_vu)__       (de (?:[mts]es|[nv]os|leurs) yeux) vue?s? @@0 <<-  ~1>> *
__[i](p_en_loc_de1)__           en (arrière|attente|amont|aval|cas|cours|dehors|dépit|direction|faveur|guise|l’(?:absence|honneur)|lieu et place|plein milieu|présence|raison|sus|termes|vertu) d(?:es?|u) @@3 <<- ~1>> *
__[i](p_en_loc_de2)__           en (flagrant délit|matière) de? @@3 <<- ~1>> *
__[i](p_en_proie_à)__           (en proie) à @@0 <<- ~1>> *
__[i](p_eu_égard_à)__           (eu égard) (?:à|aux?) @@0 <<- ~1>> *
__[i](p_la_une_de)__            la (une) d(?:es?|u) @@3 <<- ~1>> _
__[i](p_le_long_de)__           le (long) d(?:es?|u) @@3 <<- ~1>> _
__[i](p_par_le_biais_de)__      par (le biais|l’entremise) d(?:es?|u) @@4 <<- ~1>> * 
__[i](p_pour_ou_contre)__       pour (ou contre) @@5 <<- ~1>> *
__[i](p_rien_comparé_à)__       rien +(comparé) +à @@w <<- ~1>> *
__[i](p_suite_à)__              (suite) (?:à|aux?) @@0 <<- not before(r"(?i)\b(?:une|la|cette|[mts]a|[nv]otre|de) +") ~1>> *
__[i](p_vent_debout_contre)__   (vent debout) contre @@0 <<- ~1>> *

# Déterminant + nombre
__[i](p_dét_plur_nombre_nom)__
................................................................................
__[i](p_motion_de)__                    motions? (de (?:blâme|censure|défiance)) @@$ <<- ~1>> *
__[i](p_noix_de)__                      noix (de (?:cajou|p[ée]can|coco|lavage|muscade|veau|macadamia)) @@$ <<- ~1>> *
__[i](p_nu_comme_un_ver)__              nue?s? (comme (?:un ver|des vers)) @@$ <<- ~1>> *
__[i](p_numéro)__
    numéro (un|deux|trois|quatre|cinq|six|sept|huit|neuf|dix(?:-sept|-huit|-neuf|)|onze|douze|treize|quatorze|quinze|seize|vingt|trente|quarante|cinquante|soixante(?:-dix|)|quatre-vingt(?:-dix|)|cent|mille|\d+) @@$
    <<- before(r"\b[lL]a +$") =>> define(\0, [">numéro/:N:f:s"])
    <<- ~1>> *
__[i](p_oiseau_de)__                    oiseaux? (de (?:malheur|nuit|proie|mauvais augure)) @@$ <<- ~1>> * 
__[i](p_onde_de_choc)__                 ondes? (de choc) @@$ <<- ~1>> *
__[i](p_orge)__                         orge (perlé|mondé|carré) @@$ <<- ~1>> *
__[i](p_noire_comme)__                  noire?s? (comme (?:la nuit|une nuit sans lune)) @@$ <<- ~1>> *
__[i](p_partie_de_jambe_en_l_air)__     parties? (de jambes en l’air) @@$ <<- ~1>> *

__[i](p_pièce_de)__                     pièces? (de (?:théâtre|monnaie|\d+ (?:euros?|centimes?|cents?|livres? sterling|shillings?))) @@$ <<- ~1>> *
__[i](p_pomme_de)__                     pommes? (de (?:discorde|terre|reinette|pin)|d’(?:Adam|api|amour|ambre|eau|or))  @@$  <<- ~1>> *
................................................................................
__[i](p_60_qqch)__
    soixante-(?:d(?:eux|ix|ouze)|tr(?:ois|eize)|quat(?:re|orze)|cinq|six|sept|huit|neuf|quinze|seize| et (?:un|onze)|-et-(?:un|onze))
    <<- ~>> soixante
__[i](p_80_qqch)__
    quatre-vingt-(?:un|d(?:eux|ix|ouze)|tr(?:ois|eize)|quat(?:re|orze)|cinq|six|sept|huit|neuf|onze|quinze|seize)
    <<- ~>> quatre-vingts
__[i](p_qqch_100)__
    ((?:d(?:eux|ouze)|tr(?:ois|eize)|quat(?:re|orze)|cinq|s(?:ix|seize)|sept|huit|neuf|onze|quinze) cents) +({w_2})  @@0,$ 
    <<- morphex(\2, ":[NAQ].*:[pi]", ":(?:G|3p)") ~1>> cent
__[i](p_qqch_1000)__
    (?:deux|trois|quatre|cinq|six|sept|huit|neuf|cent) (?:cent |)mille
    <<- ~>> mille

__[i](p_det_plur_nombre_nom)__
    (?:le(?:ur|)s|des|ses|ces|mes|tes|nos|vos) +((?:quelque +|)(?:d(?:eux|ix|ouze)|tr(?:ois|eize|ente)|qua(?:t(?:re(?:-vingts|)|orze)|rante)|cinq(?:uante|)|s(?:ix|eize|oixante)|sept|huit|neuf|onze|quinze|vingt|cent|mille|\d+)) +({w_2})  @@w,$ 
    <<- morphex(\2, ":[NAQ].*:[pi]", ":(?:G|3p)") ~1>> *

__[i](p_une_heure)__
    (?:à |d(?:e +|’))une +heure(?: (?:d(?:eu|i)x|tr(?:ois|eize|ente)|qu(?:a(?:t(?:re|orze)|rante)|inze)|cinq(?:uante|)|s(?:ix|ept|eize)|huit|neuf|onze|douze|vingt|décente|(?:très |)tardive)|) <<- ~>> *
__[i](p_nombre_heure)__
    (?:à|de) (?:d(?:eu|i)x|tr(?:ois|eize)|qu(?:at(?:re|orze)|inze)|cinq|s(?:ix|ept|eize)|huit|neuf|onze|douze|vingt) +heures(?: (?:d(?:eu|i)x|tr(?:ois|eize|ente)|qu(?:a(?:t(?:re|orze)|rante)|inze)|cinq(?:uante|)|s(?:ix|ept|eize)|huit|neuf|onze|douze|vingt)|) <<- ~>> *

................................................................................
    le ({w_2}) (le plus) ({w_2})  @@3,w,$
    <<- morphex(\1, ":[NAQ].*:[me]", ":G") and morph(\3, ":[AQ].*:[me]", False) ~2>> *
__[i](p_la_xxx_la_plus_adj)__
    la ({w_2}) (la plus) ({w_2})  @@3,w,$
    <<- morphex(\1, ":[NAQ].*:[fe]", ":G") and morph(\3, ":[AQ].*:[fe]", False) ~2>> *
__[i](p_les_xxx_les_plus_adj)__
    (?:[lmts]es|nos|vos|leurs) ({w_2}) (les plus) ({w_2})  @@w,w,$
    <<- morphex(\1, ":[NAQ].*:[pi]", ":[123][sp]") and morph(\3, ":A.*:[pi]", False) ~2>> * 
__[i](p_le_plus_le_moins)__
    (le (?:plus|moins)) ({w_2})  @@0,$
    <<- morph(\2, ":A", ":([me]:[si]|G)") and morph(word(-1), ">(?:avoir|être)/:V", False) ~1>> *
__[i](p_bien_sûr)__
    bien sûr(?! de) <<- ~>> *
__[i](p_bien_mal_fort_adj_adv)__
    (bien|mal|(?:fort|super) (?:bien|mal)|fort) +({w_2})  @@0,$
................................................................................


#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#


!!!! Redondances dans la phrase                                                                     
 
__[i]/redon2(redondances_phrase)__
    ({w_4})[ ,].* (\1)  @@0,$
    <<- not morph(\1, ":(?:G|V0)|>même/", False) -2>> _             # Dans cette phrase, répétition de « \1 » (à gauche).
    <<- __also__ -1>> _                                             # Dans cette phrase, répétition de « \1 » (à droite).

TEST: __redon2__ Quelle {{imposture}}, c’est d’un ennui, c’est une {{imposture}}.
TEST: __redon2__ ils sont là côte à côte.
................................................................................
TEST: __redon2__ De loin en loin, elle passe.
TEST: __redon2__ Les mêmes causes produisent/produisant les mêmes effets. (répétition)



!!
!!
!!!! Groupe nominal (1)                                                                             
!!
!!

#### 1 mot

## Usage impropre

................................................................................

TEST: ils trouvent ça de plus en plus {{idiots}}              ->> idiot



!!
!!
!!!! Groupe nominal (2)                                                                             
!!
!!

## Sans article

__[i]/gn(gn_2m_accord)__
    ^ *({w_2}) +({w_2})  @@*,$
................................................................................
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]", False, False)
    -2>> =switchGender(@, False)                                                                    # Accord de genre erroné entre « \1 » et « \2 ».
    <<- __also__ and hasFemForm(\1) -1>> =switchGender(@)                                           # Accord de genre erroné avec « \2 ».
    <<- not re.search("(?i)^air$", \1) and not \2.startswith("seul")
        and morph(\1, ":[si]") and morph(\2, ":[NAQ].*:p")
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]", False, False)
    -2>> =suggSing(@)                                                                               # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
    
TEST: L’{{amande}} {{amer}}
TEST: l’{{amicale}} {{animal}}
TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
TEST: du chien et de l’{{étonnante}} {{collier}} qu’il avait autour du cou.


## un / une
................................................................................
__[i]/gn(gn_2m_le)__
    (?<!et |ou )(le) +({w_2}) +({w_2})  @@0,w,$
    <<- morph(\1, ":D", False) >>>
    <<- not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NAQ].*:f")
        and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
    -3>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
    <<- not \3.startswith("seul") 
        and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
    -3>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.
__[i]/gn(gn_2m_le_après_et_ou_de)__
    (?:et|ou) +(le) +({w_2}) +({w_2})  @@w,w,$
    <<- morph(\1, ":D", False) >>>
    <<- not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[me]", ":(?:B|G|V0|f)") and morph(\3, ":[NAQ].*:f")
        and not apposition(\2, \3) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -3>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
    <<- not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\2, \3) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -3>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.    

TEST: le test très {{cons}} qu’on a passé hier.
TEST: c’était le chien {{perdue}} des voisins.
TEST: viens vite ou le pari {{imperdables}} sera moins facile…


__[i]/gn(gn_2m_det_mas_sing)__
    (?<!et |ou |de )(?:cet?|quel|au|ledit) +({w_2}) +({w_2})  @@w,$
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[me]", ":(?:B|G|V0)") and morph(\2, ":[NAQ].*:f")
        and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
    -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
    <<- not \2.startswith("seul") 
        and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
    -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
__[i]/gn(gn_2m_det_mas_sing_après_et_ou_de)__
    (?:et|ou|de) +(?:cet?|quel|au|ledit) +({w_2}) +({w_2})  @@w,$
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[me]", ":(?:B|G|V0|f)") and morph(\2, ":[NAQ].*:f")
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.    

TEST: cet outil {{terribles}} qu’il a dans les mains
TEST: J’aimerais connaître de quel parti {{gauchistes}} on parle.


__[i]/gn(gn_2m_mon_ton_son)__
    (?<!et |ou |de )[mts]on +({w_2}) +({w_2})  @@w,$
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:m", ":(?:B|G|e|V0|f)") and morph(\2, ":[NAQ].*:f")
        and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
    -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
    <<- not \2.startswith("seul") 
        and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
    -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
__[i]/gn(gn_2m_mon_ton_son_après_et_ou_de)__
    (?:et|ou|de) +[mts]on +({w_2}) +({w_2})  @@w,$
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:m", ":(?:B|G|e|V0|f)") and morph(\2, ":[NAQ].*:f")
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\1, \2)
        and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.    

TEST: il brandissait avec fougue son drapeau {{déchirés}}
TEST: comment osez-vous médire de mon héritage {{glorieuse}}


__[i]/gn(gn_2m_la)__
    (?<!et |ou |de )(la) +({w_2}) +({w_2})  @@0,w,$
    <<- morph(\1, ":D", False) >>>
    <<- \2 != "fois" and not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NAQ].*:m")
        and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
    -3>> =suggFemSing(@, True)                                                                      # Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
    <<- not \3.startswith("seul") 
        and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
    -3>> =suggFemSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.
__[i]/gn(gn_2m_la_après_et_ou_de)__
    (?:et|ou|de) +(la) +({w_2}) +({w_2})  @@w,w,$
    <<- morph(\1, ":D", False) >>>
    <<- \2 != "fois" and not \3.startswith("seul")
................................................................................
TEST: Les couleurs rouge, jaune et verte ne doivent pas être utilisées
TEST: des passeports américain, canadien, néerlandais, allemand et britannique.



!!
!!
!!!! Groupe nominal (3)                                                                             
!!
!!

## nombre

__[i]/gn(gn_3m)__
    ^ *({w_2}) +({w_2}) +({w_3})  @@*,w,$
................................................................................

TEST: ces petites sottes {{déjantée}}



!!
!!
!!!! Groupe nominal: Accords avec de / des / du                                                     
!!
!!

__[i]/gn(gn_devinette1)__
    (?:[lmts]a|une|cette) +{w_2} +d(?:e (?:[lmts]a|cette)|’une) +(?!des )({w_2}) +({w_2})  @@w,$
    <<- morphex(\2, ":[NAQ].*:(?:m|f:p)", ":(?:G|P|[fe]:[is]|V0|3[sp])") and not apposition(\1, \2)
    -2>> =suggFemSing(@, True)                                                              # Accord erroné : « \2 » devrait être au féminin singulier.
................................................................................

TEST: {{de telles sorte}}



!!
!!
!!!! Singuliers & Pluriels                                                                          
!!
!!

#### Prépositions

# Similaires à prépositions : http://www.synapse-fr.com/manuels/PP_ATTENDU.htm
# attendu, compris, non-compris, y compris, entendu, excepté, ôté, ouï, passé, supposé, vu
................................................................................
TEST: Son point de {{vus}} prévaudra toujours, faites-vous à cette idée ou dégagez.
TEST: de mon point de {{vues}}



!!
!!
!!!! Confusions                                                                                     
!!
!!

# à / a
__[i]/conf(conf_suite_à)__
    suite (a) ({w1}) @@w,$
    <<- morph(\2, ":D|>[ld]/", False) and isStart() -1>> à          # Confusion : “a” est une forme conjuguée du verbe “avoir”. Pour la préposition, écrivez “à”.
................................................................................


__[i]/conf(conf_âcre)__
    acres?
    <<- morph(word(-1), ">(?:être|go[ûu]t|humeur|odeur|parole|parfum|remarque|reproche|réponse|saveur|senteur|sensation|vin)/", False, False)
    ->> =\0.replace("a", "â").replace("A", "Â")
    # Confusion probable : “acre” est une unité de surface agraire. Pour l’adjectif signifiant “irritant”, écrivez :|https://fr.wiktionary.org/wiki/%C3%A2cre
    
TEST: Il avait ce goût {{acre}} dans la bouche qui ne passait pas.


# accro / accroc
__[i]/conf(conf_être_accro)__
    ({etre}|dev\w+|sembl\w+|par\w+|rend\w+) +(accrocs?)  @@0,$
    <<- morph(\1, ">(?:être|devenir|para[îi]tre|rendre|sembler)/", False)
................................................................................
TEST: Nous avons déconné, nous avons été mis à {{l’amande}}.
TEST: Ces gens-là ne feront jamais {{amande honorable}}.


# annales / anal-e-s
__[i]/conf(conf_annales1)__
    (anale?s?) (?:littéraires?|politiques?|ecclésiastiques?|du (?:bac(?:calauréat|)|brevet)|de (?:physique|chimie|mathématiques|biologie|géographie)|d’histoire)  @@0
    <<- -1>> annales                                                 # Confusion : “\1” est l’adjectif relatif à l’anus.|http://fr.wiktionary.org/wiki/annales 
__[i]/conf(conf_annales2)__
    [lcdmts]es (anale?s?)  @@4
    <<- -1>> annales                                                 # Confusion : “\1” est l’adjectif relatif à l’anus.|http://fr.wiktionary.org/wiki/annales

TEST: des {{anales}} littéraires
TEST: il a bachoté les {{anales}}.

................................................................................
TEST: Les pays ibériques et scandinaves ont signé le traité.
TEST: Les gouvernements espagnol et mexicain ont signé le traité.
TEST: Béatrice Dalle et Claude


__[i]/conf(conf_où_est)__
    où (et) +({w_1}) @@w,$
    <<- morphex(\2, ":D", ":R|>(?:quand|pourquoi)") or (\2 == "l" and after("^’")) 
    -1>> est                                                                        # Confusion probable : “et” est une conjonction de coordination. Pour le verbe être à la 3ᵉ personne du singulier, écrivez :

TEST: où {{et}} cet ennemi ?
TEST: où {{et}} l’homme qui est passé ce matin ?
TEST: Je veux savoir où et quand, où et pouquoi.
TEST: où et avec qui ?

................................................................................

TEST: j’ai vu un {{flamand}} rose.


# foi / fois
__[i]/conf(conf_bonne_mauvaise_foi)__
    (mauvaise|bonne) (fois)  @@0,$
    <<- not ( \1 == "bonne" and before(r"(?i)\bune +$") and after("(?i)^ +pour toute") ) 
    -2>> foi                                                                                        # Confusion probable.|http://fr.wiktionary.org/wiki/foi
__[i]/conf(conf_faire_perdre_donner_foi)__
    ((?:f[aieî]|perd|donn|[ae])\w*) (fois) @@0,$
    <<- morph(\1, ">(?:faire|perdre|donner|avoir)/", False) -2>> foi                                      # Confusion probable.|http://fr.wiktionary.org/wiki/foi

TEST: C’est une personne de bonne {{fois}}.
TEST: Mais il a perdu {{fois}} en l’avenir.
................................................................................
#    <<- not morph(word(-1), ":D", False, False)
#    ->> quelquefois
#    # Confusion probable : « quelquefois » est un adverbe qui signifie « parfois » ; ne pas confondre avec les quelques fois qu’il est advenu ou qu’il adviendra quelque chose.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4334


__[i]/conf(conf_quelquefois_quelques_fois)__
    qu(?: elles? que fois?|elles? que fois?|elque fois) <<- ->> quelquefois|quelques fois
    # Confusion. Utilisez « quelquefois » si vous voulez dire « parfois ». Utilisez « quelques fois » pour évoquer ce qui est advenu ou adviendra plusieurs fois.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4334  

TEST: {{Quelles que fois}}, on y comprend plus rien.
TEST: {{Qu’elle que fois}}, on y comprend plus rien.
TEST: Il y va {{quelque fois}} par an.


# quoique / quoi que
................................................................................
__[i]/conf(conf_prep_soi)__
    (?:chez|don de|sur|avec|pour) (soit) @@$ <<- not after(" soit ") -1>> soi                       # Confusion probable.
__[i]/conf(conf_en_soi)__
    (?<!’)en (soit)  @@3
    <<- morph(word(1), ":[GY]", True, True) and not before("(?i)quel(?:s|les?|) qu $|on $|il $") and not after(" soit ")
    -1>> soi                                                                                        # Confusion probable.
__[i]/conf(conf_quel_que_soit2)__
    quel(?:le|)s? que (soi(?:es?|)) @@$ <<- -1>> soit|soient                                        # Confusion probable. 
__[i]/conf(conf_soi_même1)__
    (soi[tes]s? mêmes?) @@$
    <<- morph(word(-1), ":[YQ]|>(?:avec|contre|par|pour|sur)/", False, True) -1>> soi-même          # Confusion probable : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.
__[i]/conf(conf_soi_même2)__
    soi[tes]s?-mêmes? <<- ->> soi-même                                                              # Confusion : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.

TEST: chez {{soit}}, c’est presque toujours mieux.
................................................................................


# nouveau / nouvel
# TODO



!!!! Mots composés                                                                                  

__[i]/mc(mc_mot_composé)__
    ({w2})-({w2})  @@0,$
    <<- not \1.isdigit() and not \2.isdigit()
        and not morph(\0, ":", False) and not morph(\2, ":G", False) and spell(\1+\2)
    ->> \1\2                                                                                        # Vous pouvez ôter le trait d’union.
    <<- \2 != "là" and not re.search("(?i)^(?:ex|mi|quasi|semi|non|demi|pro|anti|multi|pseudo|proto|extra)$", \1)
................................................................................

TEST: __mc__ des {{portes-avions}}.



!!
!!
!!!! Casse: majuscules et minuscules                                                                
!!
!!

# Les jours
__[s]/maj(maj_jours_semaine)__
    (?:Lundi|Mardi|Mercredi|Jeudi|Vendredi|Samedi|Dimanche)
    <<- before(r"[\w,] +$") ->> =\0.lower()
................................................................................
!!
!!
!!
!!
!!
!!
!!
!!! Conjugaisons                                                                                    
!!
!!
!!
!!
!!
!!
!!
................................................................................
!!
!!
!!


!!
!!
!!!! Infinitif                                                                                      
!!
!!

__[i]/infi(infi_à_en)__
    à en ({w_2}) @@5
    <<- morphex(\1, ":V", ":Y") -1>> =suggVerbInfi(@)                                               # Le verbe devrait être à l’infinitif.

................................................................................
    -2>> =suggVerbPpas(\2, ":p")                                                    # Confusion probable : “\2” est à verbe à l’infinitif. Pour l’adjectif, écrivez :

TEST: les documents {{scanner}} ne sont pas lisibles.
TEST: tes doutes {{remâcher}} deviennent difficiles à vivre.



!!!! Participes présents                                                                             

__[i]/conj(conj_participe_présent)__  (?:ne|lui|me|te|se|nous|vous) ({w_2}ants)  @@$
    <<- morph(\1, ":A", False) -1>> =\1[:-1]                                                        # Un participe présent est invariable.|http://fr.wiktionary.org/wiki/participe_pr%C3%A9sent

TEST: nous {{épuisants}} à la tâche pour des clopinettes, nous défaillîmes.



!!!
!!!
!!! Processeur: simplification des substantifs                                                      
!!!
!!!

### @ : we remove @ we introduced after le/la/les in some cases
__<s>(p_arobase)__      @ <<- ~>> *

### Avant les verbes (ôter seulement les COI!)
................................................................................
TEST: Je me doute bien que vous avez trouvé la réponse.
TEST: Nous nous doutons bien qu’il y a une entourloupe derrière cette affaire.
TEST: Notre but n’était pas de devenir célèbres.
TEST: sans qu’on ait à le lui ordonner



!!!! OCR                                                                                            

# Participes passés
__[i]/ocr(ocr_être_participes_passés)__
    ({etre}) +({w_2}es?) @@0,$
    <<- morph(\1, ":V0e", False) >>>
    <<- \2.endswith("e") and morphex(\2, ":V1.*:Ip.*:[13]s", ":(?:[GM]|A)") and not before(r"(?i)\belle +(?:ne +|n’|)$")
    -2>> =suggVerbPpas(\2, ":m:s")                                                                  # Erreur de numérisation ?
................................................................................
TEST: __ocr__ elle avait envie de s’en sortir enfin.
TEST: __ocr__ la longueur de la circonférence étant égale à…
# TEST: __ocr__ vous êtes {{presses}} de monter à bord de ce train-ci.
# Fonctionne avec nous serons, mais pas nous sommes (bug de JavaScript?)



!!!! Confusions                                                                                     

## guerre / guère
__[i]/conf(conf_ne_pronom_pronom_verbe_guère)__
    ne (?:[mts]e|la|les?|[nv]ous|lui|leur) (?:la |les? |lui |leur |l’|)\w{w_2} (?:plus |)(guerre)  @@$
    <<- -1>> guère                                                                                  # Confusion. La guerre est conflit. Pour l’adverbe signifiant “peu”, écrivez :

TEST: tout ceci ne me rapporte {{guerre}}
................................................................................
    ({aller}) +de (soi[tes])  @@0,$
    <<- morph(\1, ">aller/", False) and not after(" soit ") -2>> soi                                # Confusion.|https://fr.wiktionary.org/wiki/aller_de_soi

TEST: cela ne va pas de {{soit}}.



!!!! Adverbes après verbe                                                                           

# fort
__[i]/sgpl(sgpl_verbe_fort)__
    ({w_2}) +(forts)  @@0,$
    <<- morphex(\1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q)|>(?:affirmer|trouver|croire|désirer|estime|préférer|penser|imaginer|voir|vouloir|aimer|adorer|souhaiter)/")
        and not morph(word(1), ":A.*:[me]:[pi]", False)
    -2>> fort                                               # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.
................................................................................
TEST: Il a de grands biens.
TEST: Ce sont des biens de peu de valeur.



!!
!!
!!!! Infinitif                                                                                      
!!
!!

__[i]/infi(infi_d_en_y)__
    d’(?:en|y) +({w_2})  @@$
    <<- morphex(\1, ":V", ":Y") -1>> =suggVerbInfi(@)                                               # Le verbe devrait être à l’infinitif.

................................................................................

TEST: lui {{mangée}} beaucoup.



!!
!!
!!!! Usage pronominal avec “avoir” au lieu d’“être”                                                 
!!
!!

__[i]/conj(conj_se_conf_être_avoir)__
    (s’)(?:en +|y+ |)({avoir})  @@0,$
    <<- morph(\2, ">avoir/", False) >>>
    <<- morph(\2, ":3p", False) -2>> sont|étaient|seront|seraient                                   # Confusion. Sous sa forme pronominale, un verbe s’emploie avec l’auxilaire “être”, non “avoir”.
................................................................................
TEST: {{nous}} nous {{avons}} donné le temps
TEST: {{vous}} vous {{avez}} perdu toute notion de décence.



!!
!!
!!!! Participes passés: se +être +verbe                                                             
!!
!!

__[i]/ppas(ppas_je_me_être_verbe)__
    je +(?:ne +|)m(?:e +|’(?:y +|))(?:s[uo]i[st]|étai[st]|fu(?:sses?|s|t)|serai[st]?) +({w_3}) @@$
    <<- morphex(\1, ":Q.*:p", ":(?:G|Q.*:[si])") and ( morph(\1, ":V[123]_.__p_e_") or (isRealEnd() and not before(r"\b[qQ]ue? +$")) )
    -1>> =suggVerbPpas(\1, ":m:s")                                                                  # Si ce participe passé se rapporte bien à “je”, il devrait être au singulier.
................................................................................
TEST: des soins que je m’étais donnés.
TEST: Si t’es pas contente, t’achètes pas.



!!
!!
!!!! Participes passés: se +laisser +adjectif                                                       
!!
!!

__[i]/ppas(ppas_me_te_laisser_adj)__
    ([mt]e|l[ae]) +(laiss\w*) +({w_3})  @@0,w,$
    <<- morph(\2, ">laisser/", False) and  morphex(\3, ":[AQ].*:p", ":(?:[YG]|[AQ].*:[is])")
    -3>> =suggSing(@)                                                                               # Accord avec « \1 » : « \3 » devrait être au singulier.
................................................................................
__[i]/ppas(ppas_avoir_été)__
    (({avoir}) +été) +({w_2})  @@0,0,$
    <<- morph(\2, ":V0a", False) >>>
    <<- morphex(\3, ":[123]s", ":[GNAQWY]") -3>> =suggVerbPpas(@)           # Après « avoir été », il faut un participe passé.
    <<- not before("[çcCÇ]’$|[cC]e n’$|[çÇ]a (?:n’|)$") and not before("(?i)^ *ne pas ") and not morph(word(-1), ":Y", False) >>>
    <<- morphex(\3, ":Y", ":A") -1>> _                                      # Tournure familière. Utilisez « être allé » plutôt que « avoir été ».
    <<- morphex(\3, ":V1..t.*:Y", ":A") -3>> =suggVerbPpas(@)               # Incohérence. Après « avoir été », il faut un participe passé (à moins que « avoir été » signifie ici « être allé »).
    
TEST: j’ai été {{instruis}} par elle
TEST: avoir été {{prit}} par surprise
TEST: Ils {{ont été}} {{réaliser}} à partir d’éléments naturels.
TEST: J’{{ai été}} camper dans les Alpes.
TEST: Tu {{as été}} prendre du bois.
TEST: J’{{ai été}} {{chercher}} du pain.
TEST: Mon grand-père aurait été fier.
................................................................................
TEST: elles doivent être {{fâché}}
TEST: elles doivent avoir été {{attaqué}}
TEST: elles peuvent avoir été {{trompé}}
TEST: elles souhaitent être plus {{considérée}}



!!!! Participes passés: accord en nombre avec la conjugaison de « être »                            

## Contrôle de l’
__[i]/ppas(ppas_être_accord_singulier)__
    ({w_2}) +(?:qui +|)(?:ne +|n’|)(?:est|était|f[uû]t|sera(?:it|)|a(?:vait|ura|urait|it|) +été|e[uû]t +été) +({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ].*:p", ":[GMWYsi]") and not morph(\1, ":G", False)
    -2>> =suggSing(@)                                                        # Accord avec « être » : « \2 » devrait être au singulier.

__[i]/ppas(ppas_être_accord_pluriel)__
    ({w_2}) +(?:qui +|)(?:ne +|n’|)(?:sont|étaient|fu(?:r|ss)ent|ser(?:ont|aient)|soient|ont +été|a(?:vaient|uront|uraient|ient) +été|eu(?:r|ss)ent +été) +({w_2})  @@0,$
    <<- not re.search("(?i)^légion$", \2) and morphex(\2, ":[NAQ].*:s", ":[GWYpi]") and not morph(\1, ":G", False)
    -2>> =suggPlur(@)                                                        # Accord avec « être » : « \2 » devrait être au pluriel.


!!!! Participes passés: accord en genre avec le substantif précédent                                

__[i]/ppas(ppas_sujet_être_accord_genre)__
    (?<![dD]’)(une? |les? |la |l’|ce(?:s|t|tte|) |[mts](?:on|a|es) |[nv]os |leurs? ) *({w_2}) +(?:qui +|)(?:ne +|n’|)(?:est|étai(?:en|)t|f[uû]t|sera(?:i(?:en|)t|)|soi(?:en|)t|s(?:er|)ont|fu(?:r|ss)ent) +({w_2})  @@0,w,$
    <<- not re.search("(?i)^légion$", \3)
        and ((morphex(\3, ":[AQ].*:f", ":[GWme]") and morphex(\2, ":m", ":[Gfe]")) or (morphex(\3, ":[AQ].*:m", ":[GWfe]") and morphex(\2, ":f", ":[Gme]")))
        and not ( morph(\3, ":p", False) and morph(\2, ":s", False) )
        and not morph(word(-1), ":(?:R|P|Q|Y|[123][sp])", False, False) and not before(r"\b(?:et|ou|de) +$")
................................................................................
TEST: Martine n’est pas {{marié}}.
TEST: Martine est très {{intelligent}}.
TEST: Martine n’est pas très {{intelligent}}.
TEST: Pierre est {{dominée}} par son adversaire.



!!!! Accords avec l’adjectif précédant le pronom                                                    

__[i]/ppas(ppas_adj_accord_je_tu)__
    ^ *({w_2}s),? (je?|tu)  @@*,$
    <<- morphex(\1, ":A.*:p", ":(?:G|E|M1|W|s|i)")
    -1>> =suggSing(@)                                                       # Si cet adjectif se réfère au pronom « \2 », l’adjectif devrait être au singulier (et accordé en genre).

TEST: {{Découragés}}, je suis parti.
................................................................................
TEST: Elles se sont {{rendues}} compte
TEST: La puissance publique s’en est-elle rendu compte ?



!!
!!
!!!! Inversion verbe/sujet                                                                          
!!
!!
__[i]/ppas(ppas_inversion_être_je)__
    (?:s[ou]is|étais|fus(?:sé|)|serais?)-je +({w_2})  @@$
    <<- morphex(\1, ":(?:[123][sp]|Y|[NAQ].*:p)", ":[GWsi]")
    -1>> =suggSing(@)                                                        # Accord avec le sujet « je » : « \1 » devrait être au singulier.
__[i]/ppas(ppas_inversion_être_tu)__
................................................................................
TEST: Ne sommes-nous pas {{aveugle}}
TEST: Que se sont-ils dit ?
TEST: Est-il question de ceci ou de cela ?
TEST: Est-ce former de futurs travailleurs ou bien des citoyens



## Accord et incohérences 
__[i]/ppas(ppas_sont)__
    sont ({w_2})  @@5
    <<- morphex(\1, ":[NAQ]", ":[QWGBMpi]") and not re.search("(?i)^(?:légion|nombre|cause)$", \1) and not before(r"(?i)\bce que?\b")
    -1>> =suggPlur(@)               # Incohérence : « \1 » est au singulier. Ou vous confondez « sont » et « son », ou l’accord en nombre est incorrect.
    <<- __else__ and morphex(\1, ":V", ":(?:N|A|Q|W|G|3p)") and not before(r"(?i)\bce que?\b")
    -1>> =suggVerbPpas(\1, ":m:p")  # Incohérence : « \1 » n’est pas un participe passé.

TEST: après avoir mis à jour sont {{profile}}.



!!
!!
!!!! Se croire/considérer/montrer/penser/révéler/savoir/sentir/voir/vouloir + participe passé/adj   
!!
!!

__[i]/ppas(ppas_je_me_verbe)__
    je +(?:ne +|)me +((?:s[eauû]|montr|pens|rév|v[oiîe])\w+) +({w_2})  @@w,$
    <<- morph(\1, ">(?:montrer|penser|révéler|savoir|sentir|voir|vouloir)/", False) and morphex(\2, ":[NAQ].*:p", ":[GWYsi]")
    -2>> =suggSing(@)                                                        # Accord avec le sujet « je » : « \2 » devrait être au singulier.
................................................................................
TEST: mais les considérer uniquement ainsi fait perdre la signification politique de leur geste.
TEST: nous considérer ainsi fait le lit de la haine…



!!
!!
!!!! Avoir + participes passés                                                                      
!!
!!

#__[i]/conj__  fait(s|e|es) ({w1}) <<- morph(\2, ":V") and not morph(\2, ":Y")
#   ->> fait \1                      # Le participe passé de faire reste au masculin singulier s’il est suivi par un verbe à l’infinitif.

__[i](p_les_avoir_fait_vinfi)__
................................................................................
TEST: c’est vous qui m’avez {{convertit}}.
TEST: parce que t’as envie que je le fasse



!!
!!
!!!! COD précédant que                                                                                  
!!
!!

__[i]/ppas(ppas_det_plur_COD_que_avoir)__
    ([ldmtsc]es) +({w_2}) +que? +(?:j’|tu |ils? |[nv]ous |elles? |on ) *(?:ne +|n’|)({avoir}) +({w_2}[éiust]e?)(?! [mts]’)  @@0,w,w,$
    <<- morph(\3, ":V0a", False)
        and not ((re.search("^(?:décidé|essayé|tenté|oublié)$", \4) and after(" +d(?:e |’)")) or (re.search("^réussi$", \4) and after(" +à")))
................................................................................
    <<- __also__ and \1 == "a" and \2.endswith("r") and not before(r"(?i)\b(?:[mtn]’|il +|on +|elle +)$")
    -1>> à                                                                                          # Confusion probable : “a” est une conjugaison du verbe avoir. Pour la préposition, écrivez :

TEST: Avoir {{marcher}} toute la journée m’a épuisée.



!!!! du / dû                                                                                        

__[i]/ppas(ppas_avoir_dû_vinfi)__
    ({avoir}) +(due?s?) +(?:[mts]’|)({w_2})  @@0,w,$
    <<- morph(\1, ":V0a", False) and (morph(\3, ":Y") or re.search("^(?:[mtsn]e|[nv]ous|leur|lui)$", \3))
    -2>> dû                                                                                         # Participe passé de devoir : « dû ».

__[i]/ppas(ppas_avoir_pronom_du_vinfi)__
................................................................................
TEST: Ont-ils {{signer}} le contrat ?
TEST: Ai-je déjà {{signez}} le contrat ?
TEST: A-t-il déjà {{signer}} le contrat ?


!!
!!
!!!! Participes passés avec formes interrogatives                                                   
!!
!!

__[i]/ppas(ppas_avoir_pronom1)__
    (?<![ltm]’)({avoir})[- ](?:je|tu|ils?|elles?|t-(?:ils?|elles?|on)|on) +({w2})  @@0,$
    <<- morph(\1, ":V0a", False) and morphex(\2, ":(?:Y|2p|Q.*:[fp])", ":m:[si]") and \2 != "prise"
        and not morph(word(-1), ">(?:les|[nv]ous|en)|:[NAQ].*:[fp]", False) and not before(r"(?i)\b(?:quel(?:le|)s?|combien) ")
................................................................................
    <<- morph(\1, ":V0a", False) and morphex(\2, ":(?:Y|2p|Q.*:[fp])", ":m:[si]") and \2 != "prise"
        and not morph(word(-1), ">(?:les|[nv]ous|en)|:[NAQ].*:[fp]", False) and not before(r"(?i)\b(?:quel(?:le|)s?|combien) ")
    -2>> =suggMasSing(@)
    # Avec « avoir », il faut un participe passé au masculin singulier.

__[i]/ppas(ppas_l_m_t_avoir_pronom)__
    ([ltm]’)({avoir})[- ](?:je|tu|ils?|elles?|t-(?:ils?|elles?|on)|[nv]ous|on) +({w2}s)  @@0,2,$
    <<- morph(\2, ":V0a", False) and morphex(\3, ":(?:Y|2p|Q.*:p)", ":[si]") 
    -3>> =suggMasSing(@)
    # Accord avec le COD « \1 » : e participe passé « \2 » devrait être au singulier (et accordé en genre).

__[i]/ppas(ppas_les_avoir_pronom)__
    les +({avoir})-(?:je|tu|ils?|elles?|t-(?:ils?|elles?|on)|[nv]ous|on) +({w_1}(?:[éiut]e?|is|se))  @@w,$
    <<- morph(\1, ":V0a", False) and morphex(\2, ":V[123]..t.*:Q.*:s", ":[GWpi]")
    -2>> =suggPlur(@)
................................................................................


__[i]/conj(conj_vous_verbe2)__
    vous [nm](?:e +(?:les? |l’|la |[nv]ous |)|’)({w_3})  @@$
    <<- morphex(\1, ":V", ":2p") and isStart() -1>> =suggVerb(@, ":2p")         # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.

TEST: vous ne l’{{avait}} pas vu.
TEST: je crois, vous m’{{avais}} trompé… 


## se + incohérence
__[i]/conj(conj_se_incohérence)__
    s(?:e +(?:les? +|la +|)|’(?:en +|y +|))({w_2}(?:e[zs]|ons|is|us))  @@$
    <<- morphex(\1, ":2s", ":3[sp]") -1>> =suggVerb(@, ":3s")                   # Incohérence. Avec le pronom “se”, le verbe ne peut être à la deuxième personne du pluriel.
    <<- __else__ and morphex(\1, ":1p", ":3[sp]") -1>> =suggVerb(@, ":3p")      # Incohérence. Avec le pronom “se”, le verbe ne peut être à la deuxième personne du pluriel.
................................................................................
TEST: se {{considérez}} comme un génie…
TEST: se {{rencontrerons}} demain grands et petits.
TEST: se {{crois}} élu par Dieu…
TEST: avec ceux se trouvant sur leur chemin



!!!! Confusions ou/où                                                                               

__[i]/conf(conf_det_nom_où_pronom)__
    ^ *(?:l(?:es? +|a +|’)|[nv]o(?:s|tre) +|ce(?:t|tte|s|) +|[mts](?:es|on|a) +|des +)({w_2}) +(ou) +(?:je|tu|ils?|elles? +> +\w+|[nv]ous +> +\w+)  @@w,w
    <<- morphex(\1, ":[NAQ]", ":G")
    -2>> où                                                                         # Confusion probable. Pour évoquer un lieu ou un moment, écrivez :|http://fr.wiktionary.org/wiki/o%C3%B9

TEST: L’hôtel {{ou}} ils sont allés l’été dernier.




!!!
!!!
!!! Processeur avant impératif                                                                      
!!!
!!!

__<i>(p_n_importe_qui_quoi)__       n(’)importe quo?i @@1 <<- ~1>> `


__<i](p_premier_ne_pro_per_obj1)__
................................................................................
TEST: Ne manquer de rien.
TEST: Ne jamais miser sur ces tocards.
TEST: Ne m’en rien laisser.


!!
!!
!!!! Impératif !                                                                                    
!!
!!

# Confusions
__[i]/imp(imp_confusion_2e_pers_pluriel)__
    ({w_2}(?:er|ai[st]|ée?s?)) (moi|l(?:es?|a|eur|ui)|nous|vous)  @@0,$
    <<- morph(\1, ":V", False) and isStart() >>>
................................................................................
TEST: {{Vas}} au diable !
TEST: {{Écartes}} de moi cette coupe.
TEST: explique-{{leurs}} de quoi il est question.


!!
!!
!!!! Impératif: traits d’union manquants                                                            
!!
!!

__[i]/imp(imp_union_moi_toi)__
    (?<!’)({w_2}) ([mt]oi)(?! même)  @@0,$
    <<- morphex(\1, ":E", ":[GM]")
    ->> \1-\2
................................................................................
TEST: {{vas y}}, ce n’est pas dangereux
TEST: {{convenez en}}, c’est une belle affaire malgré son prix élevé



!!!
!!!
!!! Processeur: destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.    
!!!
!!!

# Brainfuck (ici, prudence !)
__[i](p_pro_per_obj01)__
    (ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
................................................................................
    <<- __also__ ~1>> *
# Fin du Brainfuck



!!
!!
!!!! Confusions                                                                                     
!!
!!

#### CONFUSION a / à
__[i]/conf(conf_pronom_verbe_à)__
    ^ *(?:je|tu|ils?|on|elles?) +({w_2}) +(a)  @@w,$
    <<- morph(\1, ":V", False) and \2 != "A"
................................................................................
TEST: La révolution est crainte.
TEST: Je n’en ai cure.
TEST: Notre communauté vous est redevable.
TEST: l’humour est affaire de culture
TEST: Aller chercher l’air pur à la campagne est peine perdue.


#### CONFUSION veillez/veuillez                                                                     

__[i]/conf(conf_veillez2)__
    (veuillez) +à +(ne|{infi})  @@0,$
    <<- isStart() and morph(\2, ":Y|>ne/", False) -1>> veillez          # Confusion probable : “veuillez” est une forme conjuguée du verbe “vouloir”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1939

TEST: {{Veuillez}} à ne pas tomber dans ce piège.
TEST: Et {{veuillez}} surtout à ouvrir grand les yeux.
................................................................................
TEST: Veillez à éviter de faire des fautes.
TEST: Veillez votre mari qui est malade.



!!
!!
!!!! Infinitif                                                                                      
!!
!!

__[i]/infi(infi_comment_où)__
    (?:comment|où) +({w_2}(?:ée?s?|ez))  @@$
    <<- morphex(\1, ":V", ":M") and not (\1.endswith("ez") and after(" +vous"))
    -1>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.
................................................................................
TEST: ils sont {{tromper}} par tous ces hypocrites.
TEST: Jeûner n’est pas seulement cesser de manger.
TEST: Ne pas aimer n’est pas oublier l’autre.


!!
!!
!!!! Conjugaison                                                                                    
!!
!!

## 1sg
__[i]/conj(conj_j)__
    j’({w_1})  @@2
    <<- morphex(\1, ":V", ":1s|>(?:en|y)/") >>>
................................................................................
TEST: un des hommes qui vient.
TEST: une des dames qui se sentent mal à l’aise dans cet avion est venue nous trouver.
TEST: l’un des chants les plus diffusés pendant la Révolution culturelle


__[i]/conj(conj_infi)__
    ^ *({infi}) +({w_2})  @@*,$
    <<- morph(\1, ":Y", False) and morph(\2, ":V.[a-z_!?]+(?!.*:(?:3s|P|Q|Y|3p!))") 
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: manger {{fais}} grossir.
TEST: boire immodérément {{nuis}} à la santé


__[i]/conj(conj_det_sing_nom)__
................................................................................
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « des \1… ». Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Des hommes {{arrive}}.
TEST: Des femmes ne {{demande}} rien.
TEST: des femmes qui {{conduise}} la marche du monde.


!!!! Quel(le) que soit / quel(le)s que soient                                                       

# singulier
__[i]/conj(conj_quel_quelle_que_3sg1)__
    quel(?:le|)s? que ([sf]\w+) +(?:l[ea]|ce(?:t|tte|)|[mts](?:a|on)|[nv]otre|leur)  @@w
    <<- morphex(\1, ":V0e", ":3s")
    -1>> =suggVerb(@, ":3s")                                                             # Conjugaison erronée. Mettez “être” à la 3ᵉ personne du singulier.

................................................................................
TEST: Samantha et Eva {{viennes}} demain.
TEST: Samantha et Eva leur {{décrive}} une leçon.



!!
!!
!!!! Inversion verbe sujet                                                                          
!!
!!

__[i]/conj(conj_que_où_comment_verbe_sujet_sing)__
    (?:que?|où|comment|combien|dont|quand|pourquoi) +({w1}) (l(?:e(?:ur | )|a |’)|[mts](?:on|a) |ce(?:t|tte|) |[nv]otre |du ) *(?!plupart|majorité)({w1})  @@w,w,$
    <<- morphex(\1, ":(?:[12]s|3p)", ":(?:3s|G|W|3p!)") and not after("^ +(?:et|ou) (?:l(?:es? |a |’|eurs? )|[mts](?:a|on|es) |ce(?:tte|ts|) |[nv]o(?:s|tre) |d(?:u|es) )")
    -1>> =suggVerb(@, ":3s")                                                        # Conjugaison erronée. Accord avec « \2 \3… ». Le verbe devrait être à la 3ᵉ personne du singulier.
................................................................................
TEST: {{puisse}} les hommes enfin comprendre leurs erreurs.                         ->> puissent
TEST: {{puisses}} notre ennemi trembler de peur devant notre courage.               ->> puisse



!!
!!
!!!! Formes interrogatives ?                                                                        
!!
!!

__[i]/inte(inte_union_xxxe_je)__
    (?<![jJ]’)({w_2}[éèe]) je  @@0
    <<- morphex(\1, ":V.*:1[sŝś]", ":[GNW]") and not before(r"(?i)\bje +$") and morphex(word(1), ":", ":(?:Oo|X|1s)", True)
    ->> =\1[:-1]+"é-je"                                                                             # Forme interrogative ? Mettez un trait d’union.
................................................................................
    -1>> =suggSimil(\1, ":3p", False)                                                               # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du pluriel.

TEST: {{attaquant}}-ils                                     ->> attaquent
TEST: {{prendrons}}-elles un verre avec moi ?



!!!! Verbe auxiliaire                                                                               

__[i]/conf(conf_avoir_sujet_participe_passé)__
    ({avoir})-(?:je|tu|ils?|elles?|on) +({ppas})  @@0,$
    <<- morph(\1, ">avoir/", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.
__[i]/conf(conf_sujet_avoir_participe_passé)__
    (?:j’|je |tu |ils? |elles? |on ) *({avoir}) +({ppas})  @@*,$
    <<- morph(\1, ">avoir/", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.
................................................................................



@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: last_graph                                                                               
@@@@
@@@@
@@@@
@@@@


!!
!!
!!!! Modes verbaux                                                                                  
!!
!!

# conditionnel / futur

__vmode_j_aimerais_vinfi__
    [<start>|,]  [je|j’]  [aimerai|préférerai|préfèrerai|apprécierai|voudrai|souhaiterai|désirerai|adorerai]  @:[YX]|>(?:y|ne|que?)/¬:R
................................................................................
__vmode_qqch_que_subjonctif2__
    à       condition   [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
    pour    peu         [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
    il      peut        [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                    # Ce verbe devrait être au subjonctif.

TEST: à condition qu’il {{finit}} son boulot.
TEST: pour peu qu’il {{prend}} son devoir sérieux… 
TEST: il se peut que nous {{avons}} tort.


# Bien que + subjonctif
__vmode_bien_que_subjonctif__
    [<start>|,]  bien  [que|qu’|qu]  @:(?:Os|M)  @:I¬:(?:[GSK]|If|V0a)|>(?:hériter|recevoir|donner|offrir)/
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \1)                                                # Après « bien que », le verbe s’emploie au subjonctif.
................................................................................
        <<- /vmode/ -3>> =suggVerbMode(\3, ":I", \2)                                                # Après « quand » ou « lorsque », le verbe ne s’emploie pas au subjonctif mais à l’indicatif.

TEST: quand elle {{rencontrât}} son créateur
TEST: lorsqu’il y {{eût}} du grabuge, nous montâmes tous sur le pont.


@@@@
@@@@END_GRAPH                                                                                       
@@@@



@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: test                                                                                     
@@@@
@@@@
@@@@
@@@@

__code_legacy__
    legacy code
................................................................................
        <<- ~2>> *

TEST: Ça me fait {{plaisirs}}.



@@@@
@@@@END_GRAPH                                                                                       
@@@@


!!
!!
!!
!!
................................................................................
!!
!!
!!
!!
!!
!!
!!
!! TESTS: Faux positifs potentiels                                                                  
!!
!!
!!
!!
!!
!!
!!
................................................................................
!!
!!
!!
!!
!!
!!

!!! À trier                                                                                         
TEST: L’homme sur le bateau de Patrick {{viens}} de temps en temps {{mangé}} chez moi.
TEST: Ces marchands {{passe}} leur temps à se quereller.
TEST: Ils jugeront en toute impartialité de ce cas {{délirante}}.
TEST: Ils sont de manière si étonnante et si admirable {{arrivé}} à ce résultat…
TEST: Les tests grand public de Jean-Paul {{montre}} des résultats surprenants.
TEST: Ils ont à plusieurs reprises {{perdus}} leur sang-froid.
TEST: Ces attaques à main armée {{donne}} la chair de poule.
................................................................................
TODO: Des copains plus vieux que moi qui fumaient.
TODO: Des copains plus vieux que toi qui fumaient.
TODO: André Juin était un sculpteur français.
TODO: La bataille de Monte Cassino révèle le génie militaire du général Juin.
TODO: Les côtes sont dans leur ensemble extrêmement découpées.


!!! Indécidable                                                                                     
TEST: Du sable fin grippe les rouages (accord avec ce qui précède).
TEST: Du monde noir sortent les envahisseurs (accord avec ce qui suit).

!!! Autres tests                                                                                    
TEST: Ça a l’air de t’aller.
TEST: Et je m’en sors.
TEST: C’est à chacun d’entre nous de suivre le modèle d’Amos.
TEST: C’est toi qui voulais y aller.
TEST: je ne suis qu’une joueuse en robe de soirée.
TEST: Tu ne fais qu’aggraver les choses.
TEST: Que veut-il ? Vous parler du boulot.
................................................................................
TEST: Enfin, les thèmes de la nouvelle réforme ont été longuement débattus.
TEST: Le moral des ménages au plus haut depuis 2007
TEST: Ce qu’ils nous ont fait
TEST: Comment vous expliquez ça ?
TEST: Comment vous expliquer ça ?


!!! Tests historiques                                                                               

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

## Version 0.5.11
TEST: Un moteur à cylindrée fixe

................................................................................
TEST: Je soussigné Pierre Dupont déclare avoir pris connaissance des conditions de ce contrat.
TEST: J’ai mille cent timbres.
TEST: À qui mieux mieux, à qui mieux mieux
TEST: L’est est loin, la gare de l’est aussi.



!!! Tests repris de LanguageTool                                                                    
## NOTE : ces textes contiennent parfois des erreurs (corrigées quand repérées par le correcteur)

TEST: Au voisinage du zéro absolu de température.
TEST: La couronne périphérique alterne falaises abruptes et plages.
TEST: Henri VIII rencontre François Iᵉʳ.
TEST: à ce jour.
TEST: avoir un bel avenir
................................................................................
TEST: Le 29 février 2008.
TEST: Le 29 février 2012.
TEST: Le 29 février 2016.
TEST: Le 29 février 2020.
TEST: Le 29-février-2004


!!! Le Horla, de Guy de Maupassant                                                                  
# Nouvelle intégrale (228 lignes)
# Certains points diffèrent du texte original tiré de Wikisource :
# — les paragraphes sont souvent scindés pour des raisons pratiques.
# — les virgules avant les points de suspension ont été supprimées
# — moyen âge -> Moyen Âge
TEST: Le Horla — Guy de Maupassant
TODO: 8 mai. — Quelle journée admirable ! J’ai passé toute la matinée {{étendu}} sur l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et l’ombrage tout entière.
................................................................................
TEST: Pourquoi ce corps transparent, ce corps inconnaissable, ce corps d’Esprit, s’il devait craindre, lui aussi, les maux, les blessures, les infirmités, la destruction prématurée ?
TEST: La destruction prématurée ? toute l’épouvante humaine vient d’elle !
TEST: Après l’homme le Horla. — Après celui qui peut mourir tous les jours, à toutes les heures, à toutes les minutes, par tous les accidents, est venu celui qui ne doit mourir qu’à son jour, à son heure, à sa minute, parce qu’il a touché la limite de son existence !
TEST: Non… non… sans aucun doute, sans aucun doute… il n’est pas mort… Alors… alors… il va donc falloir que je me tue, moi !…
# FIN DU HORLA


!!! Double assassinat dans la rue morgue, d’Edgar Poe                                               
# Texte tiré de Wikisource
# Les paragraphes ont été découpés pour réduire la longueur des tests.
TEST: DOUBLE ASSASSINAT DANS LA RUE MORGUE — Edgar Poe
TEST: Quelle chanson chantaient les sirènes ? quel nom Achille avait-il pris, quand il se cachait parmi les femmes ? – Questions embarrassantes, il est vrai, mais qui ne sont pas situées au-delà de toute conjecture.
TEST: Sir Thomas Browne.
TODO: Les facultés de l’esprit qu’on définit par le terme {{analytiques}} sont en elles-mêmes fort peu susceptibles d’analyse.
TEST: Nous ne les apprécions que par leurs résultats. Ce que nous en savons, entre autres choses, c’est qu’elles sont pour celui qui les possède à un degré extraordinaire une source de jouissances des plus vives.
................................................................................
TEST: Néanmoins, qu’il n’ait pas pu débrouiller ce mystère, il n’y a nullement lieu de s’en étonner, et cela est moins singulier qu’il ne le croit ; car, en vérité, notre ami le préfet est un peu trop fin pour être profond. Sa science n’a pas de base.
TEST: Elle est tout en tête et n’a pas de corps, comme les portraits de la déesse Laverna, – ou, si vous aimez mieux, tout en tête et en épaules, comme une morue.
TEST: Mais, après tout, c’est un brave homme. Je l’adore particulièrement pour un merveilleux genre de cant auquel il doit sa réputation de génie.
TEST: Je veux parler de sa manie de nier ce qui est, et d’expliquer ce qui n’est pas[2].
# FIN DU DOUBLE ASSASSINAT DANS LA RUE MORGUE


!!! Vers Dorés, de Pythagore                                                                        
# Origine?
TEST: Aux dieux, suivant les lois, rends de justes hommages ;
TEST: Respecte le serment, les héros et les sages ;
TEST: Honore tes parents, tes rois, tes bienfaiteurs ;
TEST: Choisi parmi tes amis les hommes les meilleurs.
TEST: Sois obligeant et doux, sois facile en affaires.
TEST: Ne hais pas ton ami pour des fautes légères ;
................................................................................
TEST: XXX. Mais abstiens-toi des aliments que je t’ai défendus. Apprends à discerner ce qui est nécessaire dans la purification et la délivrance de l’âme. Examine tout ; donne à ta raison la première place et, content de te laisser conduire, abandonne-lui les rênes.
TEST: XXXI. Ainsi, quand tu auras quitté les dépouilles mortelles, tu monteras dans l’air libre ; tu deviendras un dieu immortel et la mort n’aura plus d’empire sur toi.
TEST: Fin des vers dorés de Pythagore
TEST: Note : Chez les Pythagoriciens, la monade ou l’unité représente Dieu-même, parce qu’elle n’est engendrée par aucun nombre, qu’elle les engendre tous, qu’elle est simple et sans aucune composition. La dyade, ou le nombre deux, est l’image de la nature créée, parce qu’elle est le premier produit de l’unité, parce qu’elle est inspirée, parce qu’ayant des parties elle peut se décomposer et se défendre. La monade et la dyade réunies forment le ternaire, et représentent l’immensité de tout ce qui existe, l’être immuable et la matière altérable et changeante. J’ignore par quelle propriété le quaternaire, le nombre quatre, est encore un emblème de la divinité.
# FIN DES VERS DORÉS DE PYTHAGORE


!!! Épître du feu philosophique, de Jean Pontanus                                                   
# Les paragraphes ont été découpés et ne correspondent pas à ceux du texte.
TEST: Épître du Feu Philosophique
TEST: Lettre concernant la pierre dite philosophale
TEST: Jean Pontanus
TEST: in Theatrum Chimicum, 1614, t. III
TEST: « Nous affirmons, au contraire, — et l’on peut avoir foi en notre sincérité, — qu’il sera impossible d’obtenir le moindre succès dans l’Œuvre si l’on a pas une connaissance parfaite de ce qu’est le Vase des Philosophes ni de quelle manière il faut le fabriquer. Pontanus avoue qu’avant de connaître ce vaisseau secret il avait recommencé, sans succès, plus de deux cents fois le même travail, quoiqu’il besognât sur les matières propres et convenables, et selon la méthode régulière. L’artiste doit faire lui-même son vaisseau ; c’est une maxime de l’art. N’entreprenez rien, en conséquence, tant que vous n’aurez pas reçu toute la lumière sur cette coquille de l’œuf qualifiée secretum secretorum chez les maîtres du Moyen Âge. »
TEST: — Fulcanelli, Le Mystère des Cathédrales, p. 204-205
................................................................................
TEST: Et moyennant notre feu, la médecine se multipliera si elle est conjointe à la matière crue, non seulement en quantité mais aussi en vertu.
TEST: Recherche donc de toutes les forces de ton esprit ce feu, et tu parviendras au but que tu t’es proposé ; car c’est lui qui fait tout l’œuvre, et il est la clef de tous les Philosophes, laquelle ils n’ont jamais révélée dans leurs livres.
TEST: Si tu penses bien profondément aux propriétés du feu ci-dessus, tu la connaîtras, mais non autrement.
TEST: Donc, touché d’un mouvement de pitié, j’ai écrit ceci ; mais, et afin que je me satisfasse, le feu n’est point transmué avec la matière, comme je l’ai dit ci-dessus.
TEST: J’ai bien voulu le dire et en avertir les prudents de ces choses, pour qu’ils ne dépensent pas inutilement leur argent, mais qu’ils sachent auparavant ce qu’ils doivent chercher, et, par ce moyen, parviendront à la vérité de l’Art ; non pas autrement. À Dieu.
# FIN DE L’ÉPÎTRE DU FEU PHILOSOPHIQUE

!!! Le Misanthrope, de Molière                                                                      
TEST: LE MISANTHROPE (1666)
TEST: de Molière
TEST: Texte établi par Charles Louandre, Charpentier, 1910 (2, pp. 170-239).
TEST: PERSONNAGES
TEST: Alceste, amant de Célimène,
TEST: Philinte, ami d’Alceste,
TEST: Oronte, amant de Célimène,







|







 







|







 







|

























|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|




|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|






















|







 







|











|







 







|










|


|






|







|









|





|







|







 







|







 







|







 







|





|







 







|



|







 







|







 







|


|







 







|







 







|









|







 







|












|







 







|







 







|







 







|







 







|







 







|






|







 







|







 







|







 







|




|







 







|







 







|









|







 







|







 







|







 







|







 







|







 







|







 







|













|







 







|







 







|







 







|







 







|







 







|







 







|


|



|


|







|







 







|







 







|







 







|






|







 







|







 







|
|







 







|







 







|







 







|







 







|













|












|












|











|













|












|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|










|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|













|







 







|







 







|







 







|













|







 







|







 







|







 







|







 







|







 







|







 







|







 







|













|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|








|







 







|







 







|








|







 







|







 







|







 







|







 







|



|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
...
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
...
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
...
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
...
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
...
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
...
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
...
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
...
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
...
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
...
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
...
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
...
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
...
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
...
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
...
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
....
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
....
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
....
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
....
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
....
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
....
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
....
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
....
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
....
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
....
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
....
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
....
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
....
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
....
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
....
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
....
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
....
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
....
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
....
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
....
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
....
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
....
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
....
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
....
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
....
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
....
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
....
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
....
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
....
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
....
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
....
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
....
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
....
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
....
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
....
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
....
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
....
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
....
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
....
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
....
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
....
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
....
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
....
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
....
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
....
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
....
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
....
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
....
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
....
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
....
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
....
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
....
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
....
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
....
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
....
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
....
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
....
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
....
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
....
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
....
9919
9920
9921
9922
9923
9924
9925
9926
9927
9928
9929
9930
9931
9932
9933
.....
10076
10077
10078
10079
10080
10081
10082
10083
10084
10085
10086
10087
10088
10089
10090
.....
10094
10095
10096
10097
10098
10099
10100
10101
10102
10103
10104
10105
10106
10107
10108
.....
10264
10265
10266
10267
10268
10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
.....
10279
10280
10281
10282
10283
10284
10285
10286
10287
10288
10289
10290
10291
10292
10293
.....
10424
10425
10426
10427
10428
10429
10430
10431
10432
10433
10434
10435
10436
10437
10438
10439
10440
10441
10442
10443
10444
10445
10446
10447
10448
10449
.....
10561
10562
10563
10564
10565
10566
10567
10568
10569
10570
10571
10572
10573
10574
10575
.....
10599
10600
10601
10602
10603
10604
10605
10606
10607
10608
10609
10610
10611
10612
10613
.....
10660
10661
10662
10663
10664
10665
10666
10667
10668
10669
10670
10671
10672
10673
10674
.....
10694
10695
10696
10697
10698
10699
10700
10701
10702
10703
10704
10705
10706
10707
10708
.....
10807
10808
10809
10810
10811
10812
10813
10814
10815
10816
10817
10818
10819
10820
10821
.....
10849
10850
10851
10852
10853
10854
10855
10856
10857
10858
10859
10860
10861
10862
10863
.....
10942
10943
10944
10945
10946
10947
10948
10949
10950
10951
10952
10953
10954
10955
10956
.....
11138
11139
11140
11141
11142
11143
11144
11145
11146
11147
11148
11149
11150
11151
11152
.....
11267
11268
11269
11270
11271
11272
11273
11274
11275
11276
11277
11278
11279
11280
11281
11282
11283
11284
11285
11286
11287
11288
11289
11290
11291
11292
11293
11294
11295
.....
11322
11323
11324
11325
11326
11327
11328
11329
11330
11331
11332
11333
11334
11335
11336
.....
11382
11383
11384
11385
11386
11387
11388
11389
11390
11391
11392
11393
11394
11395
11396
.....
11438
11439
11440
11441
11442
11443
11444
11445
11446
11447
11448
11449
11450
11451
11452
11453
11454
11455
11456
11457
11458
11459
11460
11461
11462
11463
11464
11465
11466
.....
11596
11597
11598
11599
11600
11601
11602
11603
11604
11605
11606
11607
11608
11609
11610
.....
11749
11750
11751
11752
11753
11754
11755
11756
11757
11758
11759
11760
11761
11762
11763
.....
11822
11823
11824
11825
11826
11827
11828
11829
11830
11831
11832
11833
11834
11835
11836
.....
11866
11867
11868
11869
11870
11871
11872
11873
11874
11875
11876
11877
11878
11879
11880
.....
11886
11887
11888
11889
11890
11891
11892
11893
11894
11895
11896
11897
11898
11899
11900
.....
11933
11934
11935
11936
11937
11938
11939
11940
11941
11942
11943
11944
11945
11946
11947
.....
11950
11951
11952
11953
11954
11955
11956
11957
11958
11959
11960
11961
11962
11963
11964
11965
11966
11967
11968
11969
11970
11971
11972
11973
11974
11975
11976
11977
11978
.....
12009
12010
12011
12012
12013
12014
12015
12016
12017
12018
12019
12020
12021
12022
12023
.....
12142
12143
12144
12145
12146
12147
12148
12149
12150
12151
12152
12153
12154
12155
12156
.....
12263
12264
12265
12266
12267
12268
12269
12270
12271
12272
12273
12274
12275
12276
12277
.....
12411
12412
12413
12414
12415
12416
12417
12418
12419
12420
12421
12422
12423
12424
12425
.....
12454
12455
12456
12457
12458
12459
12460
12461
12462
12463
12464
12465
12466
12467
12468
.....
12487
12488
12489
12490
12491
12492
12493
12494
12495
12496
12497
12498
12499
12500
12501
.....
12591
12592
12593
12594
12595
12596
12597
12598
12599
12600
12601
12602
12603
12604
12605
.....
12843
12844
12845
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855
12856
12857
.....
13143
13144
13145
13146
13147
13148
13149
13150
13151
13152
13153
13154
13155
13156
13157
.....
13220
13221
13222
13223
13224
13225
13226
13227
13228
13229
13230
13231
13232
13233
13234
.....
13299
13300
13301
13302
13303
13304
13305
13306
13307
13308
13309
13310
13311
13312
13313
.....
13429
13430
13431
13432
13433
13434
13435
13436
13437
13438
13439
13440
13441
13442
13443
.....
13451
13452
13453
13454
13455
13456
13457
13458
13459
13460
13461
13462
13463
13464
13465
13466
13467
13468
13469
13470
13471
13472
13473
13474
.....
13542
13543
13544
13545
13546
13547
13548
13549
13550
13551
13552
13553
13554
13555
13556
.....
13604
13605
13606
13607
13608
13609
13610
13611
13612
13613
13614
13615
13616
13617
13618
13619
13620
13621
13622
13623
13624
13625
13626
13627
.....
13645
13646
13647
13648
13649
13650
13651
13652
13653
13654
13655
13656
13657
13658
13659
.....
13669
13670
13671
13672
13673
13674
13675
13676
13677
13678
13679
13680
13681
13682
13683
.....
13692
13693
13694
13695
13696
13697
13698
13699
13700
13701
13702
13703
13704
13705
13706
.....
13731
13732
13733
13734
13735
13736
13737
13738
13739
13740
13741
13742
13743
13744
13745
13746
13747
13748
13749
.....
13800
13801
13802
13803
13804
13805
13806
13807
13808
13809
13810
13811
13812
13813
13814
.....
14576
14577
14578
14579
14580
14581
14582
14583
14584
14585
14586
14587
14588
14589
14590
.....
16641
16642
16643
16644
16645
16646
16647
16648
16649
16650
16651
16652
16653
16654
16655
.....
17013
17014
17015
17016
17017
17018
17019
17020
17021
17022
17023
17024
17025
17026
17027
.....
17557
17558
17559
17560
17561
17562
17563
17564
17565
17566
17567
17568
17569
17570
17571
.....
17657
17658
17659
17660
17661
17662
17663
17664
17665
17666
17667
17668
17669
17670
17671
.....
17703
17704
17705
17706
17707
17708
17709
17710
17711
17712
17713
17714
17715
17716
17717

# ERREURS COURANTES
# http://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Fautes_d%27orthographe/Courantes


!!
!!
!! Options                                                                                        !!
!!
!!

OPTGROUP/basic: typo apos, esp tab, nbsp unit, tu maj, num virg, nf chim, ocr mapos, liga
OPTGROUP/gramm: conf sgpl gn
OPTGROUP/verbs: infi conj ppas, imp inte vmode
OPTGROUP/style: bs pleo, redon1 redon2, neg
................................................................................
OPTLABEL/debug:     Debug
OPTLABEL/idrule:    Display control rule identifier [!]|Display control rule identifier in the context menu message.



!!
!!
!! Définitions pour les regex                                                                     !!
!!
!!

# REGEX
DEF: avoir          [aeo]\w*
DEF: etre           [êeésf]\w+
DEF: avoir_etre     [aeêésfo]\w*
................................................................................
!!
!!
!!
!!
!!
!!
!!
!! PASSE 0: PARAGRAPHE PAR PARAGRAPHE                                                             !!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!



!!
!!
!!! Espaces & tabulations                                                                         !!
!!
!!

# Espaces surnuméraires
# Note : les tabulations ne sont pas soulignées dans LibreOffice. Mais l’erreur est bien présente.
__<s>/tab(tab_début_ligne)__           ^[      ]+ <<- ->> ""                   # Espace(s) en début de ligne à supprimer : utilisez les retraits de paragraphe.
__<s>/tab(tab_fin_ligne)__             [       ]+$ <<- ->> ""                  # Espace(s) en fin de ligne à supprimer.
................................................................................
# À partir d’ici, toute règle est susceptible de supprimer des caractères et les remplacer par des espaces ou des chaînes de longueur égale.
#
#


!!!
!!!
!!! Processeur: efface les ponctuations gênantes (URL, sigles, abréviations, IP, heures, etc.)    !!
!!!
!!!

# e-mail
__<i>(p_email)__
    \w[\w.-]*@\w[\w.-]*\w[.]\w+ <<- ~>> *

................................................................................
TEST: Dossier C:\Program Files (x86)\LibreOffice
TEST: [1] Dossier à revoir.



!!!
!!!
!!! Processeur: balises HTML et LaTeX                                                             !!
!!!
!!!

# HTML
__<i>/html(p_html_amp_xxx)__            &amp;[a-zA-Z]+; <<- ~>> _
__<i>/html(p_html_lt)__                 &lt; <<- ~>> "   <"
__<i>/html(p_html_gt)__                 &gt; <<- ~>> >
................................................................................
TEST: __html__  des <b>{{homme}}</b>
TEST: __html__  des [b]{{femme}}[/b]



!!
!!
!!!! Écritures épicènes dystypographiques                                                         !!
!!
!!

# (attention aux modifs: brainfuck d’intensité non négligeable)
# La désambiguïsation est faite lors de la deuxième passe

__[i](typo_écriture_épicène_tous_toutes)__
................................................................................

TEST: je suis {{déconsidéré.e}} par ma hiérarchie.
TEST: il faut en parler à l’{{auteur(e)}} et à son agent.


!!
!!
!!!! Majuscules manquantes                                                                        !!
!!
!!

# Majuscules après un point
__[s]/maj(majuscule_après_point)__
    ({w_2})[.] ([a-zéàèîçô]\w*)  @@0,$
    <<- not re.search("(?i)^(?:etc|[A-Z]|chap|cf|fig|hab|litt|circ|coll|r[eé]f|étym|suppl|bibl|bibliogr|cit|op|vol|déc|nov|oct|janv|juil|avr|sept)$", \1)
................................................................................
    <<- after("\w\w[.] +\w+") -1>> =\1.capitalize()                                                 # Majuscule en début de phrase, sauf éventuellement lors d’une énumération.

TEST: {{je}} suis disponible quand tu veux. Mais pas aujourd’hui.


!!
!!
!!!! Virgules                                                                                     !!
!!
!!

# virgules manquantes
__[i>/virg(virgule_manquante_avant_etc)__   {w_1}( etc[.])  @@$ <<- -1>> , etc.                     # Avant « etc. », il faut mettre une virgule.
__[i>/virg(virgule_manquante_avant_car)__
    ({w_1})( car)(?= (?:j[e’]|tu|ils?|nous|vous|elles?|on|les?|l[a’]|ces?|des?|cette|[mts](?:on|a|es))\b)  @@0,$
................................................................................
#__<i>/typo__  ({w_2}) *$   @@0
#    <<- before("[a-zéàùèê][.] ") and not before(r"^(?:\d|\w[.])")
#    -1>> \1.|\1…|\1 !|\1 ?|\1 :|\1 ;|\1,                                               # Il manque une ponctuation finale.


!!
!!
!!!! Espaces manquants                                                                            !!
!!
!!

__<s>/typo(typo_espace_manquant_après1)__
    ({w1})[,:]({w_1})  @@0,$  <<- not \1.isdigit() -2>> " \2"                                       # Il manque un espace.
__<s>/typo(typo_espace_manquant_après2)__
    [?!;%‰‱˚»}]({w_1})  @@$  <<- -1>> " \1"                                                       # Il manque un espace.
................................................................................
TEST: espace.{{Manquant}}                                                   ->> " Manquant"
TEST: qui ont refuse.{{de}} se sauver                                       ->> " de"
TEST: pic.twitter.com/PICNAME


!!
!!
!!!! Points                                                                                       !!
!!
!!

# Points superflus
__[i>/typo(typo_et_cetera)__             etc(?:[.]{3,5}|…) <<- ->> etc.                             # Un seul point après « etc. »

TEST: {{etc…}}
................................................................................
TEST: Ligne de points{{...........................}}
TEST: Aujourd’hui, M. Camus va nous lire son texte.



!!
!!
!!!! Tirets                                                                                       !!
!!
!!

# Tirets, énumérations et dialogues
__<s>/typo(typo_tiret_début_ligne)__    ^[-_][  ] <<- ->> "— |– "           # Dialogues et énumérations : un tiret cadratin ou demi-cadratin, suivi d’un espace insécable, est requis.
__<s>/typo(typo_tiret_dans_dialogue)__  ^ *«[  ](-[  ]) @@$ <<- -1>> "— |– "
    # Dialogues : un tiret cadratin ou demi-cadratin, suivi d’un espace insécable, est requis. (Attention : à moins qu’il s’agisse d’un dialogue inclus dans un autre dialogue, cette manière d’écrire est erronée.)
................................................................................
TEST: {{—}}Viens là.                                                        ->> "— |– "
TEST: Cette phrase contient{{ - }}c’est certain – des tirets d’incise.      ->> " – | — "
TEST: « {{- }}Viens ! On va en finir avec cette affaire, sale fils de pute. ->> "— |– "


!!
!!
!!!! Ponctuations redondantes                                                                     !!
!!
!!

# virgules et points
__<s>/typo(typo_virgules_points)__
    ,[.,]{2,}
    <<- ->> =\0.replace(",", ".").replace("...", "…")                                               # Erreur de numérisation ? Virgules au lieu de points ?

TEST: Ah !{{,.,}} et en quoi consistait le festin ?


__<s>/typo(typo_ponctuation_superflue1)__    , ?([.,;:!?]) @@$ <<- ->> =",|" + \1       # Une de ces ponctuations est superflue.
................................................................................
TEST: Succession : a{{;}} b.                                                ->> " ;"
TEST: C’est assez {{: }}parlez !                                            ->> ": "
TEST: {{» }}C’est ce qu’on croit savoir.                                    ->> "» |« "


!!
!!
!!!! Signes typographiques                                                                        !!
!!
!!

__<s>/typo(typo_signe_multiplication)__
    (\d+) ?[x*] ?(\d+)  @@0,$ <<- not \0.startswith("0x") ->> \1 × \2                               # Signe de multiplication typographique.

TEST: {{800 x 600}}                                                         ->> 800 × 600
................................................................................

TEST: __liga__ un {{fl}}ottement                                           ->> fl
TEST: __liga__ une belle {{fi}}gure                                        ->> fi


!!
!!
!!!! Apostrophes                                                                                  !!
!!
!!
## Apostrophe typographique
__[i>/apos(apostrophe_typographique)__
    ([ldsncjmç]|jusqu|lorsqu|aujourd|presqu|quelqu|puisqu|qu|prud|entr)['´‘′`](?=[\w"«]) @@0 <<- ->> \1’    # Apostrophe typographique.
__[i>/apos(apostrophe_typographique_après_t)__
    t['´‘′`](?!ils?|elles?|on)(?=[\w"«]) <<- ->> t’                                                         # Apostrophe typographique.
................................................................................
TEST: Il {{s }}était dit qu’il ne le ferait pas.                                ->> s’
TEST: Je {{m }}étais imaginé que je pourrais pas retrouver cet objet.           ->> m’
TEST: Je {{n }}ai pas retrouvé l’ambiance de mes années de lycée.               ->> n’


!!
!!
!!!! Guillemets typographiques                                                                    !!
!!
!!

__<s>/typo(typo_guillemets_typographiques_doubles_ouvrants)__
    "(?=\w)
    <<- not before(r"[a-zA-Zéïîùàâäôö]$") ->> « |“                                                  # Guillemets typographiques ouvrants.
__<s>/typo(typo_guillemets_typographiques_doubles_fermants)__
................................................................................
TEST: Le {{'}}grand’ homme.                                                 ->> “|‘|‹
TEST: Le ‘grand{{'}} homme.                                                 ->> ”|’|›
TEST: J’en ai '''marre''' (syntaxe wiki).


!!
!!
!!!! Élisions                                                                                     !!
!!
!!

__[i]/typo(typo_élision_déterminants)__
    (l[ea] |de )([aâeéêiîoôu]\w+)  @@0,$
    <<- not re.search("(?i)^(?:onz[ei]|énième|iourte|ouistiti|ouate|one-?step|ouf|Ouagadougou|I(?:I|V|X|er|ᵉʳ|ʳᵉ|è?re))", \2) and not \2.isupper() and not morph(\2, ":G", False)
    -1>> =\1[0]+"’"                                         # Élision de l’article devant un mot commençant par une voyelle.|http://fr.wikipedia.org/wiki/Élision
................................................................................
    -1>> cet                                                # Euphonie : « ce » devient « cet » devant un mot commençant par une voyelle.

TEST: {{ce}} animal est dangereux


!!
!!
!!!! Divers                                                                                       !!
!!
!!

## NF (memo: don’t use flag i)
__[s]/nf(nf_norme_française)__
    [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)
................................................................................
    <<- ->> =\0.replace("2", "₂").replace("3", "₃").replace("4", "₄")                               # Typographie des composés chimiques. [!]

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


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

__<s>/typo(typo_cohérence_guillemets_chevrons_ouvrants)__
    («)[^»“]+?(”)  @@0,$
    <<- not before(r"\w$") -1>> “                                                                   # Guillemet ouvrant différent du guillemet fermant (”).
    <<- not after(r"^\w") -2>> " »"                                                                 # Guillemet fermant différent du guillemet ouvrant («).
................................................................................
TEST: « Je suis là.
TEST: — Oui, nous t’avons vu arriver. »
TEST: « J’en suis “malade”. »


!!
!!
!!!! Espaces insécables avant unités de mesure                                                    !!
!!
!!

__[s]/unit(unit_nbsp_avant_unités1)__
    ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹]|)) ?)(?:[kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|°C|℃)(?![’'])  @@0,0
    <<- -1>> "\2 "
    # Avec une unité de mesure, mettez un espace insécable.
................................................................................
TEST: 1998 s’annonce grandiose.
TEST: il y en a 3,43 milliards.
TEST: je veux 200 euros.


!!
!!
!!!! Grands nombres                                                                               !!
!!
!!

__[s]/num(num_grand_nombre_soudé)__
    \d\d\d\d+
    <<- not before("NF[  -]?(C|E|P|Q|X|Z|EN(?:[  -]ISO|)) *$") >>>
    <<- \0.__len__() > 4 ->> =formatNumber(\0)                                                      # Formatage des grands nombres.
................................................................................
    <<- ~>> =\0.replace(" ", "_")

TEST: Il a perdu {{20 000}} euros à la Bourse en un seul mois.


!!
!!
!!!! Dates                                                                                        !!
!!
!!
__[i]/date(date_nombres)__
    (?<!\d[ /.-])(\d\d?)[ /.-](\d\d?)[ /.-](\d\d\d+)(?![ /.-]\d)  @@0,w,$
    <<- not checkDate(\1, \2, \3) and not before(r"(?i)\bversions? +$") ->> _                       # Cette date est invalide.
    <<- ~>> =\0.replace(".", "-").replace(" ", "-").replace("\/", "-")

................................................................................
TEST: le {{32.03.2018}}
TEST: le {{81/01/2012}}
TEST: 12-12-2012


!!
!!
!!!! Redondances                                                                                  !!
!!
!!
__[i]/redon1(redondances_paragraphe)__
    ({w_4})[  ,.;!?:].*[  ](\1)  @@0,$
    <<- not morph(\1, ":(?:G|V0)|>(?:t(?:antôt|emps|rès)|loin|souvent|parfois|quelquefois|côte|petit|même)/", False) and not \1[0].isupper()
    -2>> _                                                      # Dans ce paragraphe, répétition de « \1 » (à gauche).
    <<- __also__ -1>> _                                         # Dans ce paragraphe, répétition de « \1 » (à droite).
................................................................................
TEST: __redon1__ Car parfois il y en a. Mais parfois il n’y en a pas.




!!!
!!!
!!! Processeur: Dernier nettoyage avant coupure du paragraphe en phrases                          !!
!!!
!!!

# Trait d’union conditionnel (u00AD)
__<i>(p_trait_union_conditionnel1)__    \w+‑\w+‑\w+ <<- ~>> =\0.replace("‑", "")
__<i>(p_trait_union_conditionnel2)__    \w+‑\w+ <<- ~>> =\0.replace("‑", "")

................................................................................
# empêcher la scission en fin de dialogue
__<s>(p_fin_dialogue1)__    ([?!…][?!…  ]*)[ "'”» ]*,  @@0 <<- ~1>> *
__<s>(p_fin_dialogue2)__    ([?!…][?!…  ]*)[ "'”» ]*[a-zéèêîô]  @@0 <<- ~1>> ,

TEST: « Je suis donc perdu ? », dit Paul.
TEST: “C’est bon !”, croit savoir Marie.
TEST: “Parce que… ?” finit par demander Paul.
TEST: « Dans quel pays sommes-nous ? » demanda un manifestant.


!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!! PASSE 1: PHRASE PAR PHRASE                                                                     !!
!!
!!
!!
!!
!!
!!
!!
................................................................................
!!
!!

[++]



!!!! Doublons (casse identique)                                                                   !!

__[s](doublon)__
    ({w1}) {1,3}\1  @@0
    <<- not re.search("(?i)^([nv]ous|faire|en|la|lui|donnant|œuvre|h[éoa]|hou|olé|joli|Bora|couvent|dément|sapiens|très|vroum|[0-9]+)$", \1)
        and not (re.search("^(?:est|une?)$", \1) and before("[’']$"))
        and not (\1 == "mieux" and before("(?i)qui +$"))
    ->> \1   # Doublon.

TEST: Il y a un {{doublon doublon}}.


!!!! Nombres: typographie                                                                         !!

#(\d\d\d\d)-(\d\d\d\d)   <<- ->> \1–\2                              # Ne pas séparer deux dates par un trait d’union, mais par un tiret demi-cadratin.

__[s]/num(num_lettre_O_zéro1)__  [\dO]+[O][\dO]+ <<- not option("ocr") ->> =\0.replace("O", "0")    # S’il s’agit d’un nombre, utilisez le chiffre « 0 » plutôt que la lettre « O ».
__[s]/num(num_lettre_O_zéro2)__  [1-9]O <<- not option("ocr") ->> =\0.replace("O", "0")             # S’il s’agit d’un nombre, utilisez le chiffre « 0 » plutôt que la lettre « O ».

TEST: année {{2O11}}                                                      ->> 2011
................................................................................
TEST: le {{IInd}} siècle                        ->> IIᵈ
TEST: le {{VIième}} siècle                      ->> VIᵉ
TEST: Le {{XXIème}} siècle.                     ->> XXIᵉ
TEST: le {{XXè}} siècle.                        ->> XXᵉ



!!!! Écritures épicènes invariables                                                               !!

__[i](d_typo_écriture_épicène_pluriel)__
    ({w_1}[éuitsrn])_(?:[nt]|)e_s  @@0
    <<- morphex(\1, ":[NAQ]", ":G") =>> define(\1, [":N:A:Q:e:p"])

__[i](d_typo_écriture_épicène_singulier)__
    ({w_2}[éuitsrn])_e  @@0
    <<- morph(\1, ":[NAQ]", False) =>> define(\1, [":N:A:Q:e:s"])


!!!! Dates                                                                                        !!

__[i]/date(date_jour_mois_année)__
    (\d\d?) (janvier|février|ma(?:rs|i)|a(?:vril|o[ûu]t)|jui(?:n|llet)|septembre|octobre|novembre|décembre) (\d\d\d+)  @@0,w,$
    <<- not checkDateWithString(\1, \2, \3) ->> _                                                   # Cette date est invalide.

TEST: {{29 février 2011}}


__[i]/date(date_journée_jour_mois_année1)__
    (lundi|m(?:ardi|ercredi)|jeudi|vendredi|samedi|dimanche),? (?:le |)(\d\d?)-(\d\d?)-(\d\d+)  @@0,w,w,$
    <<- not after(r"^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDay(\1, \2, \3, \4)
    -1>> =getDay(\2, \3, \4)                                                                        # Le jour de la date suivante est incorrect.

TEST: {{mercredi}}, le 10-06-2014                                         ->> mardi


__[i]/date(date_journée_jour_mois_année2)__
    (lundi|m(?:ardi|ercredi)|jeudi|vendredi|samedi|dimanche),? (?:le |)(\d\d?) (janvier|février|ma(?:rs|i)|a(?:vril|o[ûu]t)|jui(?:n|llet)|septembre|octobre|novembre|décembre) (\d\d+)  @@0,w,w,$
    <<- not after(r"^ +av(?:ant|) +J(?:C|ésus-Christ)") and not checkDayWithString(\1, \2, \3, \4)
    -1>> =getDayWithString(\2, \3, \4)                                                              # Le jour de la date suivante est incorrect.

TEST: {{mercredi}}, le 10 juin 2014                                       ->> mardi
TEST: {{lundi}}, 18 août 1912                                             ->> dimanche
TEST: lundi, 18 août 1912 avant Jésus-Christ (date imaginaire)


__[i]/date(date_mois_31)__ 31 (avril|juin|septembre|novembre)  @@3
    <<- ->> 30 \1                                                                                   # Cette date est invalide. Il n’y a que 30 jours en \1.

TEST: le {{31 avril}}


__[i]/date(date_février)__ 3[01] février
    <<- ->> 28 février|29 février                                                                   # Cette date est invalide. Il n’y a que 28 ou 29 jours en février.

TEST: le {{30 février}}



!!!
!!!
!!! Processeur: épuration des signes inutiles et quelques simplifications                         !!
!!!
!!!

# fin de phrase
__<s>(p_fin_de_phrase)__        [.?!:;…][ .?!… »”")]*$  <<- ~>> *

# début de phrase
................................................................................
__[i](p_références_aux_notes)__ [a-zéèâàôîù][a-zéèâàôîù-]+(\d+) @@$ <<- not morph(\0, ":", False) ~1>> *

# faux positifs avec adverbes de négation
__[i](p_pas_mal)__              pas mal <<- not morph(word(-1), ":D", False) ~>> *
__[i](p_pas_assez)__            pas assez ({w_2}) @@$ <<- morph(\1, ":A", False) and not morph(word(-1), ":D", False) ~>> *

# faux positifs avec «à chez»
__[i](p_de_chez_à_chez_pronom)__    de chez \w+ (?:à|jusqu à) chez (?:moi|toi|lui|elles?|eux|nous|vous) <<- ~>> *
__[i](p_de_chez)__                  (jusqu à|de) chez @@0 <<- ~1>> *

# faux positifs
__[i](p_en_tout_et_pour_tout)__ en tout et pour tout <<- ~>> *
__[i](p_au_sortir_de)__         au (sortir) de?s?  @@3 <<- ~1>> *
__[i](p_au_revoir)__            au revoir <<- ~>> au_revoir

................................................................................


TEST: New York {{étaient}} {{devenue}} la plaque tournante de tous les trafics.


!!
!!
!!!! Traits d’union                                                                               !!
!!
!!

__<i]/tu(tu_t_euphonique_incorrect)__
    ([-–—− ]t(?:[’' ][-–—−]?|[-–—−][’' ]?))(ils?|elles?|on|tu)  @@0,$
    <<- re.search("(?i)^(?:ils|elles|tu)$", \2) -1>> -      # Le “t” euphonique n’est pas nécessaire avec “\2”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?T1=t+euphonique&id=2513
    <<- __else__ and \1 != "-t-" and \1 != "-T-" -1>> -t-   # Pour le “t” euphonique, il faut deux traits d’union. Pas d’apostrophe. Pas d’espace.
................................................................................

TEST: Cet {{in folio}} est incroyable.
TEST: c’est {{in}} stage de réinsertion.
TEST: Dans ce drive in douze hommes mangent.


__[i]/tu(tu_préfixe_mi)__
    mi ({w2}) @@$  <<- morph(\1, ":[NAQ]", False) ->> mi-\1                                         # S’il s’agit d’un seul mot, il manque un trait d’union.

TEST: J’ai été engagé pour un {{mi temps}}.


__[i]/tu(tu_préfixe_quasi)__
    (?:l(?:es?|a|eurs?)|ce(?:tte|t|s|)|des?|m(?:a|on|es)|[ts](?:es|a)) (quasi ({w1}))  @@$,$
    <<- morphex(\2, ":N", ":[AGW]") -1>> quasi-\2                                                   # Il manque un trait d’union : « quasi » s’accroche au mot qui le suit s’il s’agit d’un nom.
    <<- ~1>> \2

TEST: leurs {{quasi indifférences}}


__[i]/tu(tu_préfixe_semi)__
................................................................................
__[i]/tu(tu_là_adverbe)__       là (bas|haut|desso?us|dedans|devant|derrière) @@3 <<- ->> là-\1     # Il manque un trait d’union.
__[i]/tu(tu_n_est_ce_pas)__             n’est(?: ce[ -]pas|-ce-pas) <<- ->> n’est-ce pas            # Un trait d’union.
__[i]/tu(tu_nord_sud_ouest)__           (nord|sud) ouest @@0 <<- ->> \1-ouest                       # Il manque un trait d’union.
__[i]/tu(tu_nord_sud_est)__             (nord|sud) est @@0 <<- isEnd() ->> \1-est                   # Il manque un trait d’union.
__[i]/tu(tu_outre_mer)__                outre mer <<- ->> outre-mer                                 # Il manque un trait d’union.
__[i]/tu(tu_ouï_dire)__                 ou[iï] dire <<- morph(word(-1), ":G") ->> ouï-dire          # Il manque un trait d’union.
__[i]/tu(tu_par_préposition)__
    par (desso?us|devant|delà|derrière|dehors|dedans|devers)  @@$
    <<- ->> par-\1                                                                                  # Il manque un trait d’union.
__[i]/tu(tu_par_ci_par_là)__            par ci,? par là <<- ->> par-ci par-là|par-ci, par-là        # Trait(s) d’union manquant(s).
__[i]/tu(tu_prêt_à_porter)__
    (prêts?) à porter  @@0
    <<- before(r"(?i)\b(?:les?|du|des|un|ces?|[mts]on) +") ->> \1-à-porter                          # Il manque les traits d’union.
__[i]/tu(tu_plate_forme)__  plates? formes? <<- ->> plate-forme|plates-formes|plateforme|plateformes    # Il manque un trait d’union. Vous pouvez aussi souder les deux mots.
__[i]/tu(tu_quelques_uns_unes)__       quelques (une?s) @@$ <<- ->> quelques-\1                     # Il manque un trait d’union.
__[i]/tu(tu_plus_moins_values)__       (plus|moins) (values?)  @@0,$  <<- ->> \1-\2                 # Il manque un trait d’union.
__[i]/tu(tu_rez_de_chaussée)__         rez de chaussées? <<- ->> rez-de-chaussée                    # Il manque un trait d’union.
__[i]/tu(tu_science_fiction)__         science fiction <<- ->> science-fiction                      # Il manque un trait d’union.
__[i]/tu(tu_stock_option)__            stock options? <<- ->> =\0.replace(" ", "-")                 # Il manque un trait d’union.
................................................................................
TEST: on a fait {{à la va vite}}…
TEST: marre de faire des {{allers retours}}
TEST: {{le}} {{bouche à oreille}}
TEST: à ce {{moment là}}                                                        ->> moment-là
TEST: une {{plus value}}                                                        ->> plus-value
TEST: Il est {{en-dessous}} de tout.                                            ->> en dessous
TEST: Ils sont {{en-deçà}} de tout                                              ->> en deçà
TEST: {{Là bas}}.                                                               ->> Là-bas
TEST: {{Au dessus}}                                                             ->> Au-dessus
TEST: {{ci dessus}}                                                             ->> ci-dessus
TEST: {{par dessus}}                                                            ->> par-dessus
TEST: {{au delà}}                                                               ->> au-delà
TEST: {{ci devant}}.                                                            ->> ci-devant
TEST: Il faisait froid cet {{hiver la}}.                                        ->> hiver-là
TEST: {{Ceux la}} vont à la pêche.                                              ->> Ceux-là
................................................................................
__[u]/tu(tu_Nouveau_Brunswick)__        Nouveau Brunswick <<- ->> Nouveau-Brunswick                     # Il manque un trait d’union.
__[u]/tu(tu_Nouvelle_Qqch)__            Nouvelle (Zélande|Calédonie|Orléans) @@$ <<- ->> Nouvelle-\1    # Il manque un trait d’union.
__[u]/tu(tu_Pas_de_Calais)__            Pas de Calais <<- ->> Pas-de-Calais                             # Il manque les traits d’union.
__[u]/tu(tu_Rhône_Alpes)__              Rhône Alpes <<- ->> Rhône-Alpes                                 # Il manque les traits d’union.
__[u]/tu(tu_Saône_et_Loire)__           Saône et Loire <<- ->> Saône-et-Loire                           # Il manque un trait d’union.
__[u]/tu(tu_Jésus_Christ)__             Jésus Christ <<- ->> Jésus-Christ                               # Il manque un trait d’union.
__[u]/tu(tu_Jean_prénom)__
    Jean (Baptiste|Claude|François|Jacques|Louis|Luc|Marc|Marie|Michel|Paul|Philippe|Pierre)  @@$
    <<- ->> Jean-\1                                                                                 # Il manque un trait d’union.
__[u]/tu(tu_Marie_Prénom)__
    Marie (Ange|Agnès|Anne|Antoinette|Cécile|Chantal|Charlotte|Christine|Claire|Claude|Dominique|France|Françoise|Hélène|Jeanne|José|Josèphe|Line|Louise|Madeleine|Noëlle|Odile|Paule|Pierre|Rose|Thérèse)  @@$
    <<- ->> Marie-\1                                                                                # Il manque un trait d’union.
__[s]/tu(tu_St_Ste_Bidule)__
    ((Ste?) )[A-ZÉÈÎ]\w+ @@0,0
    <<- -1>> \2-
    # Il manque un trait d’union s’il s’agit d’une église, d’une cité, d’une communauté… S’il s’agit d’une personne, écrivez « saint(e) » sans majuscule, sans trait d’union.

TEST: Émigrer au {{Royaume Uni}}
................................................................................
    lors que?
    <<- not before(r"(?i)\bd[eè]s +$") ->> =\0.replace(" ", "")                                     # Attachez les deux mots.|https://fr.wiktionary.org/wiki/lorsque

TEST: Elle y arriva {{lors qu}}’elle trouva l’astuce permettant l’ouverture de la porte.
TEST: Dès lors qu’on sait comment s’y prendre, aucune raison de faillir.


!!!! Virgules                                                                                     !!

# Dialogues
__[u]/virg(virgule_dialogue_après_nom_propre)__
    ([A-ZÉÈ][\w-]+) (\w+-(?:moi|toi|l(?:ui|a|e(?:ur|s|))|nous|vous|je|tu|ils|elles))  @@0,$
    <<- morphex(\1, ":M", ":G") and not morph(\2, ":N", False) and isStart()
    -1>> \1,                                                                        # Dialogue ? Ajoutez une virgule pour mettre en incise la personne à qui s’adresse la réplique.

................................................................................

TEST: Tu vas les {{donner}} Rachel.
TEST: Il va la {{tuer}} Paul.
TEST: Cependant les promesses n’engagent que ceux qui les croient, comme aimait à le dire Jacques Chirac.



!!!! Apostrophe manquante (2)                                                                     !!

__<s>/typo(typo_apostrophe_manquante_audace2)__
    ^ *([LDSNCJMTÇ] )[aeéiouhAEÉIOUHyîèêôûYÎÈÊÔÛ]  @@*
    <<- option("mapos") -1>> =\1[:-1]+"’"                                                           # Il manque peut-être une apostrophe.

TEST: __mapos__ {{L }}opinion des gens, elle s’en moquait.



!!!! A / À: accentuation la préposition en début de phrase                                        !!

__<s]/typo(typo_À_début_phrase1)__
    ^ *(A) (?!t[’-](?:ils?|elles?|on))({w_2})  @@*,$
    <<- morphex(\2, ":[GNAY]", ":(?:Q|3s)|>(?:priori|post[eé]riori|contrario|capella|fortiori)/")
        or (\2 == "bientôt" and isEnd())
    -1>> À                                                                                          # S’il s’agit de la préposition « à », il faut accentuer la majuscule.
__<s>/typo(typo_À_début_phrase2)__
................................................................................
TEST: — {{A}} t’emmener loin de tout ceci.
TEST: {{A}} bientôt, mon ami.
TEST: A bientôt fini son devoir.
TEST: A priori, nul ne peut y parvenir sans une aide extérieure.
TEST: A devient notre meilleure chance d’y parvenir.


!!!! Accentuation des majuscules                                                                  !!

__[u]/maj(maj_accents)__
    E(?:tat|glise|co(?:le|nomie)|quipe|lectri(?:cité|que)|gal(?:ité|ement)|té)s? @@1
    <<- ->> ="É"+\0[1:]                                                                            # Accentuez les majuscules.
    <<- ~>> ="É"+\0[1:]

TEST: Le budget de l’{{Etat}}.



!!!
!!!
!!! Désambiguïsation                                                                              !!
!!!
!!!

# mots grammaticaux
__[i](d_dans)__
    dans
    <<- not morph(word(-1), ":D.*:p|>[a-z]+ièmes/", False, False) =>> select(\0, ":R")
................................................................................
TEST: elle finit par être très fière de son fils.




!!
!!
!!!! OCR                                                                                          !!
!!
!!

# ?
__<s]/ocr(ocr_point_interrogation)__
    [  ]7
    <<- after0("^(?: +[A-ZÉÈÂ(]|…|[.][.]+| *$)") ->> " ?"                                           # Erreur de numérisation ?
................................................................................
TEST: __ocr__ trouve {{l£}} temps
TEST: __ocr__ elle s’{{avance*}} sur le seuil
TEST: __ocr__ par beaucoup d’argent ? {{{Il}} débouche le Jack Daniels


!!
!!
!!!! Incohérences de base                                                                         !!
!!
!!

### double négation
__[i](double_négation)__
    pas (personne|aucune?|jamais)  @@4
    <<- not morph(word(-1), ":D:[me]" ,False, False) ->> \1|pas, \1
................................................................................

TEST: je ne sais {{des}} {{ses}} choses.



!!
!!
!!!! Style                                                                                        !!
!!
!!

#__bs__  Mr <<- ->> M.                          # M. est l’usage courant pour “Monsieur”. « Mr » est l’abréviation ancienne, française.

# à / en
__[i]/bs(bs_en_à_ville)__
................................................................................
#Se rappelle de l’amour

#enjoindre à qqn de faire qqch


!!
!!
!!!! Pléonasmes                                                                                   !!
!!
!!

__[i]/pleo(pleo_abolir)__               (abol\w+) (?:absolument|entièrement|compl[èé]tement|totalement) @@0 <<- morph(\1, ">abolir/", False) ->> \1         # Pléonasme.
__[i]/pleo(pleo_acculer)__              (accul\w+) aux? pieds? du mur @@0 <<- morph(\1, ">acculer/", False) ->> \1                                          # Pléonasme.
__[i]/pleo(pleo_achever)__              (ach[eè]v\w+) (?:absolument|entièrement|compl[èé]tement|totalement) @@0 <<- morph(\1, ">achever/", False) ->> \1    # Pléonasme.
__[i]/pleo(pleo_en_cours)__             actuellement en cours <<- not after(r" +de?\b") ->> en cours                                            # Pléonasme.
................................................................................
TEST: {{ta}} aimée                                            ->> ton
TEST: {{ma}} obligée                                          ->> mon
TEST: Ce couple va donner à la France sa très importante collection qui rejoindra le musée d’Orsay


!!
!!
!!!! Confusions                                                                                   !!
!!
!!

__[s>/conf(conf_ne_n)__     [nN]e n’                        <<- ->> ne m’|n’                        # Incohérence. Double négation.
__[s>/conf(conf_pronoms1)__ [mtMT]e ([nmst](?:’|e )) @@$    <<- ->> \1                              # Incohérence.
__[s>/conf(conf_pronoms2)__ [sS]e ([mst](?:’|e )) @@$       <<- ->> \1                              # Incohérence.
__[s>/conf(conf_de_d)__     [dD][eu] d’(?![A-ZÉÂÔÈ])        <<- ->> d’                              # Incohérence.

TEST: Il {{ne n’}}arrive jamais à l’heure.
TEST: Ça {{me te }}prend la tête, toutes ces complications vaines.
TEST: il {{se m’}}est difficile d’y parvenir.
TEST: Ça t’arrive {{de d’}}arriver à l’heure ?
TEST: Les écrits de d’Alembert.

................................................................................
TEST: toute chose pourrait finalement advenir indifféremment en n’importe quel point du globe


__[i]/conf(conf_malgré_le_la_les_leur)__
    malgré l(?:es? +|eurs? +|a +|’)({w_3})  @@$
    <<- morphex(\1, ":", ":[GNAWMB]") -1>> =suggSimil(\1, ":[NA]", True)                             # Incohérence : après “malgré”, on devrait trouver un groupe nominal.

TEST: malgré l’{{arrête}} qui interdisait le port
TEST: malgré les deux précédentes erreurs


__[i]/conf(conf_ma_ta_cette_verbe)__
    ([mt]a|cette) +({w_2})  @@0,$
    <<- morphex(\2, ":V.*:(?:Y|[123][sp])", ":[NAQ]") and \2[0].islower()
    -2>> =suggSimil(\2, ":[NA]:[fe]:[si]", True)                                                    # Incohérence avec « \1 » : « \2 » est un verbe.
................................................................................

# Trop de faux positifs
#__[i]/conf__
#    très +(bien|\w+ent) +({w2})  @@w,$
#    <<- morph(\1, ":W", False) and morphex(\2, ":[123][sp]", ":[GAQW]") -2>> _
#    # Incohérence avec « très » : « \2 » n’est ni un adjectif, ni un participe passé, ni un adverbe.


__[i]/conf(conf_très_verbe)__
    très +(?!envie)({w_2})  @@$
    <<- morphex(\1, ":(?:Y|[123][sp])", ":[AQW]") -1>> =suggSimil(\1, ":[AW]", True)                # Incohérence avec « très » : « \1 » n’est ni un adjectif, ni un participe passé, ni un adverbe.
    <<- morph(\1, ">jeûne/", False) -1>> =\1.replace("û", "u")                                      # Confusion. Le jeûne est une privation de nourriture.|https://fr.wiktionary.org/wiki/jeune

TEST: Il est très {{cite}}.
TEST: très {{suivit}} par ce détective
................................................................................
    (à les) ({w_2})  @@0,6  <<- morphex(\2, ":[NAQ]", ":(?:Y|Oo)") -1>> a les|aux
    # Confusion. Ou vous confondez “a” (préposition) avec “a” (avoir), ou vous devez employer “aux”. Exemple : Elle _a_ donné du travail _aux_ employés _à_ profusion.
__[i]/conf(conf_a_à_au_aux)__
    (à) aux?(?! (?:moins|plus)) @@0 <<- -1>> a                                                      # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez :
__[i]/conf(conf_a_à_base_cause)__
    (a) (?:base|cause) d(?:es?|u|) @@0 <<- not before(r"(?i)\bce que?\b") -1>> à                    # Confusion. Utilisez la préposition « à ».
__[i]/conf(conf_a_à_faim_peur_honte_soif)__
    (à) +(?:faim|peur|honte|soif) @@0 <<- -1>> a                                                    # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez :
__[i]/conf(conf_a_à_part)__
    (a) part ({w1}) @@0,7 <<- morph(\2, ":(?:M[12]|D|Oo)") -1>> à                                   # Confusion probable.
__[i]/conf(conf_a_à_les_à)__
    les (à)(?! côtés| peu près| prioris?| post[eé]rioris?| valoirs?| pics?| propos) @@4 <<- -1>> a
    # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez :
__[i]/conf(conf_a_à_avant_conj_prep)__
    (à) +(?:a(?:fin|lors|près|uprès|ux?(?! moins| plus| mieux)|vant|vec)|au-de(?:dans|hors|là|sso?us|vant)|chez|d(?:ans|evant|ès|déjà|onc|urant)|lorsque?|malgré|par(?:ce|mi|)|p(?:endant|our|uisque)|que?|sur|tandis)  @@0
    <<- -1>> a                                                                                      # Confusion probable : “à” est une préposition. Écrivez “a” pour la conjugaison de “avoir”.
__[i]/conf(conf_a_participe_passé_ou_vconj)__
    (à) +({w_2})  @@0,$
    <<- \2.islower() and \2 != "coté" >>>
    <<- morphex(\2, ":(?:V.......[_z][az].*:Q|V1.*:Ip:2p)", ":[MGWNY]") -1>> a                      # Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez :
................................................................................
    -1>> à                  # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
__[s]/conf(conf_a_à_locutions4)__
    (a) (?:[mts](?:es|on|a)|[nv]o(?:s|tre)|leurs?) (?:avis|c(?:onnaissance|ôtés)|c(?:œur|orps) défendant|dé(?:pens|triment)|disposition|encontre|égard|grand(?: désarroi|e (?:surprise|tristesse))|guise|insu|portée|risques et périls|sujet|tour)  @@0
    <<- not before(r"(?i)(?:\bque? |[ln]’$|(?<!-)\b(?:il|elle|on|y|n’en) +$)")
    -1>> à                  # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
__[s]/conf(conf_a_à_infi)__
    (?<![mtn]’)(a) (?:[mts](?:’(?:en +|y +|)|e +)|[nv]ous|)({w_2}(?:er|re|ir))  @@0,2
    <<- morph(\2, ":Y", False) and not before(r"(?i)\bque? |(?:il|elle|on|n’(?:en|y)) +$")
    -1>> à                  # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0
__[s]/conf(conf_a_à_après_interrogative)__
    \w+-(?:je|ils?|elles?|je|tu|on|vous|nous) (a)(?! priori| posteriori| fortiori)  @@$
    <<- -1>> à              # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0


TEST: Cette femme {{à}} été confondue avec une autre.
................................................................................
__[i]/conf(conf_golf)__
    (champion(?:ne|nat|)s?|clubs?|joueu(?:r|se)s?|parcours|sacs?|balles?|terrains?|tournois?|compétitions?|passionnée?s?|écoles?|professeurs?|parties?|professionnel(?:le|)s?|amateure?s?|stages?|journées?|après-midi|matinées?|heures?|fédérations?|fans?) de (golfe)  @@0,$
    <<- -2>> golf                                                           # Confusion. Le golfe est une zone de mer ou d’un lac avancée dans les terres. Ex : Le golfe Persique.
__[i]/conf(conf_golfe)__
    (golf) (persique|d[ue] (?:Bengale|Botnie|Gascogne|Gabès|Guinée|Lion|Morbihan|Mexique|Porto|Saint-Laurent|Thaïlande|Tonkin|Tunis|Winam)|d’(?:Aden|Ajaccio|Alaska|Hammamet))  @@0,$
    <<- -1>> golfe                                                          # Confusion. Le golf est un sport.
__[i]/conf(conf_Golfe)__
    (?:guerre|émir|monarchie)s? du (golf) @@$ <<- -1>> Golfe                # Confusion. Le golf est un sport.

TEST: Il a réalisé un documentaire sur la guerre du {{Golf}}.
TEST: C’est un bon joueur de {{golfe}}.
TEST: Le {{golf}} Persique est presque une mer fermée.
TEST: J’ai fait de la voile dans le {{golf}} du Morbihan.
TEST: Le {{golf}} d’Aden.


# haut delà / au-delà
__[i]/conf(conf_au_delà)__      haut[- ]del[àa] <<- ->> au-delà             # Confusion.

TEST: il va dans l’{{haut delà}}


# héro / héros
__[i]/conf(conf_héros)__
    (?:le|quel|cet?|un|du|au) (héro) @@$
................................................................................
    ^ *(?:il|ce) (peut-être) @@$
    <<- -1>> peut être                                                      # Confusion probable : « peut-être » signifie « possiblement ».
__[i]/conf(conf_cela_peut_être_adj)__
    ^ *(?:cela|ceci) (peut-être) ({w_2})  @@w,$
    <<- morph(\2, ":[AQ]", False) -1>> peut être                            # Confusion probable : « peut-être » signifie « possiblement ».
__[i]/conf(conf_peu_à_peu)__
    peu[xt]? a peu[xt]?
    <<- ->> peu à peu                                                       # Confusion : « peu à peu » ou « petit à petit ».
__[i]/conf(conf_peu_importe)__
    (peu[tx]) importe(?:nt|) @@w
    <<- morph(word(-1), ":C", False, True) -1>> peu                         # Confusion : « \1 » est une conjugaison de “pouvoir”, utilisez “peu” pour dire “pas beaucoup”.
__[i]/conf(conf_adv_de_peu)!6__
    (?:très|trop|de|quelque|pour|à) (peu[tx]) @@$
    <<- -1>> peu                                                            # Confusion : « \1 » est une conjugaison de “pouvoir”, utilisez “peu” pour dire “pas beaucoup”.
__[i]/conf(conf_un_peu)!6__
................................................................................
TEST: être rassuré quant à l’avenir du continent européen
TEST: il comprit trop tard qu’en elle naquit alors le doute qui l’éloigna de lui à jamais.
TEST: Quand à mon tour je réalise l’imposture, c’est trop tard.


# quand bien même
__[i]/conf(conf_quand_bien_même)__
    combien même <<- not after("^ si ") ->> quand bien même                                         # Locution conjonctive.|https://fr.wiktionary.org/wiki/quand_bien_m%C3%AAme

TEST: J’irai, {{combien même}} vous seriez tous contre moi.
TEST: Il partirait en guerre quand bien même devrait-il être tout seul.
TEST: Elle veut savoir combien même si ça ne lui est d’aucune utilité immédiate.


# qu’elle / quelle
................................................................................

# tant / temps (1re partie)
__[i]/conf(conf_en_temps_de)__
    en (tant?) de?  @@3
    <<- not after("^[ ’](?:lieux|endroits|places|mondes|villes|pays|régions|cités)") -1>> temps     # Confusion. Écrivez « en temps de » si vous évoquez une période de temps.
__[i]/conf(conf_de_temps_en_temps)__    de tant? en tant?                   <<- ->> de temps en temps   # Confusion. Écrivez « de temps en temps ».
__[i]/conf(conf_un_temps_soit_peu)__    un (temps|tan) soi[tes]? peu  @@3   <<- -1>> tant           # Confusion. Écrivez « un tant soit peu ».
__[i]/conf(conf_tant_de)__              a(?:près|vec) (temps|tan) de?  @@w  <<- -1>> tant           # Confusion.|http://fr.wiktionary.org/wiki/tant
__[i]/conf(conf_à_temps_partiel)__      [àa] (tant?) (?:partiel|plein)s? @@2 <<- -1>> temps         # Confusion.
__[i]/conf(conf_en_même_temps)__        en mêmes? (tant?)  @@$              <<- -1>> temps          # Confusion.

TEST: en {{tant}} de guerre, il faut savoir faire face et ne pas faiblir face à l’adversité.
TEST: ils vont {{de tan en tan}} au restaurant
TEST: un {{temps}} soit peu perdu dans cette affaire.
TEST: après {{temps}} de souffrance, il faut savoir lâcher prise.
................................................................................


# voire / voir
__[i]/conf(conf_voir_voire)__
    (voir) ({w_2}) @@0,$
    <<- not re.search("^(?:grand|petit|rouge)$", \2) and morphex(\2, ":A", ":[NGM]") and not \2.istitle()
        and not before(r"(?i)\b[ndmts](?:e |’(?:en |y ))(?:pas |jamais |) *$") and not morph(word(-1), ":O[os]|>(?:[ndmts]e|falloir|pouvoir|savoir|de)/", False)
    -1>> voire
    # Confusion probable : “voir” est un verbe concernant la perception visuelle. Pour signifier “et même possiblement”, écrivez :|https://fr.wiktionary.org/wiki/voire

__[i]/conf(conf_voire_voir)__
    voire
    <<- morph(word(-1), ":Cs|>(?:ni|et|sans|pour|falloir|[pv]ouvoir|aller)/", True, False) ->> voir
    # Confusion probable : “voire” signifie “et même possiblement”. Pour le verbe, écrivez “voir”.|https://fr.wiktionary.org/wiki/voire

................................................................................
TEST: car elles pénètrent dans les poumons voire le système sanguin.
TEST: des enfants malades, qui préfèrent souvent voir Dark Vador que des vieux clowns un peu flippants.



!!
!!
!!!! Pronoms + incohérences                                                                       !!
!!
!!
__[i](p_m_enfin)__      m’enfin <<- ~>> *

__[i]/conf(conf_j_y_en_qqch)__
    (j’(?:en +|y +|))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|O[onw])")
................................................................................
#__[i](p_notre_père_qui_es_au_cieux)__   notre père (qui est? aux cieux) @@11 <<- ~1>> *


@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: graphe1
@@@@
@@@@
@@@@
@@@@

__p_notre_père_qui_es_au_cieux__
    notre père qui [es|est] aux cieux
        <<- ~4>> !
        <<- ~3:0>> _


!!
!!
!!!! Formes verbales sans sujet                                                                   !!
!!
!!

__tag_sujets__
    [je|j’]
    [moi|moi-même] qui
    [moi|moi-même] [seul|seule]
................................................................................
TEST: Mon épouse et moi-même avons toujours dit
TEST: que vous ou moi ignorions à peu près tout du boson de Higgs n’a pas du tout le même sens



!!
!!
!!!! Locutions invariables                                                                        !!
!!
!!

__locutions_invariables__
    [plus|moins|autant]  que  [prévue|prévus|prévues]
        <<- -3>> prévu                                                                              # Invariable. Implicitement, \1 que ce qui était prévu.

................................................................................
TEST: il y en a moins que {{prévues}}                         ->> prévu
TEST: comme {{convenus}}                                      ->> convenu



!!
!!
!!!! Tout, tous, toute, toutes                                                                    !!
!!
!!

__purge_tout_tous_toutes__
    [fais-les|fais-nous]                        [tous|toutes]
    [faisons-les|faisons-nous|faisons-vous]     [tous|toutes]
    [faites-les|faites-nous|faites-vous]        [tous|toutes]
................................................................................
TEST: aux tout débuts, il y eut bien des erreurs
TEST: comment les inégalités sociales impactent la santé des tout petits



!!
!!
!!!! Adverbes de négation                                                                         !!
!!
!!

__ne_manquant__
    [<start>|,]  je             [le|la|l’|les|me|m’|te|t’|se|s’|nous|vous|lui|leur]     @:1s¬:(?:Oo|X)  [pas|rien|jamais|guère|point]
    [<start>|,]  tu             [le|la|l’|les|me|m’|te|t’|se|s’|nous|vous|lui|leur]     @:2s¬:(?:Oo|X)  [pas|rien|jamais|guère|point]
    [<start>|,]  [il|elle|on]   [le|la|l’|les|me|m’|te|t’|se|s’|nous|vous|lui|leur]     @:3s¬:(?:Oo|X)  [pas|rien|jamais|guère|point]
................................................................................
TEST: __neg__ Il {{y}} a jamais d’eau.
TEST: __neg__ je {{deviendrai}} pas hargneux.
TEST: __neg__ il {{le}} lui donne pas souvent.


!!
!!
!!!! Infinitif                                                                                    !!
!!
!!

__infi_ne_pas_jamais_etc__
    ne [pas|rien|guère|point]                   ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  (@:[VNA]¬:(?:Y|W|X|O[ow])|>que?/)
    ne [pas|rien|guère|point] [trop|beaucoup]   ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  (@:[VNA]¬:(?:Y|W|X|O[ow])|>que?/)
    ne [pas|rien|guère|point] non plus          ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  (@:[VNA]¬:(?:Y|W|X|O[ow])|>que?/)
................................................................................
    bien assez tôt
    bien des fois
    bien souvent
    bon gré ?,¿ mal gré
    bras dessus ?,¿ bras dessous
    çà et là
    ce faisant
    [cela|ça|ceci] mis à part
    [cela|ça|ceci] va sans dire
    ces derniers temps
    cette [fois-là|fois-ci]
    chaque fois
    comme avant
    comme autrefois
    comme d’ habitude
................................................................................
    vaille que vaille
    ventre à terre
    vers nulle part
        <<- ~>> *


@@@@
@@@@END_GRAPH
@@@@


__[i](p_plus_avant)__           plus avant(?! de | que?) <<- ~>> *


__[i](p_qui_loc_tps)__          qui (ce (?:jour|matin|après-midi|soir)-là|cette (?:nuit|matinée|soirée)-là) @@4 <<- ~1>> *





TEST: ils vont et viennent, toujours {{cotes a cotes}}…
TEST: Nous irons {{tours à tours}} chercher du bois.
TEST: Ma thèse en 180 secondes.


# je / tu / il / elles / nous / vous / ils / elles
__[i](p_je_vous_en_prie)__      je (?:t’en|vous en) (?:prie|supplie) <<- ~>> *
__[i](p_nous_vous_en_prions)__  nous (?:t’en|vous en) (?:prions|supplions) <<- ~>> *

# mot-là
__[i](p_qqch_tiret_là)__        ({w1})(-là) @@0,$ <<- morphex(\1, ":[NAQ]", ":G") ~2>> *

# Après
................................................................................
__[i](p_de_mes_yeux_vu)__       (de (?:[mts]es|[nv]os|leurs) yeux) vue?s? @@0 <<-  ~1>> *
__[i](p_en_loc_de1)__           en (arrière|attente|amont|aval|cas|cours|dehors|dépit|direction|faveur|guise|l’(?:absence|honneur)|lieu et place|plein milieu|présence|raison|sus|termes|vertu) d(?:es?|u) @@3 <<- ~1>> *
__[i](p_en_loc_de2)__           en (flagrant délit|matière) de? @@3 <<- ~1>> *
__[i](p_en_proie_à)__           (en proie) à @@0 <<- ~1>> *
__[i](p_eu_égard_à)__           (eu égard) (?:à|aux?) @@0 <<- ~1>> *
__[i](p_la_une_de)__            la (une) d(?:es?|u) @@3 <<- ~1>> _
__[i](p_le_long_de)__           le (long) d(?:es?|u) @@3 <<- ~1>> _
__[i](p_par_le_biais_de)__      par (le biais|l’entremise) d(?:es?|u) @@4 <<- ~1>> *
__[i](p_pour_ou_contre)__       pour (ou contre) @@5 <<- ~1>> *
__[i](p_rien_comparé_à)__       rien +(comparé) +à @@w <<- ~1>> *
__[i](p_suite_à)__              (suite) (?:à|aux?) @@0 <<- not before(r"(?i)\b(?:une|la|cette|[mts]a|[nv]otre|de) +") ~1>> *
__[i](p_vent_debout_contre)__   (vent debout) contre @@0 <<- ~1>> *

# Déterminant + nombre
__[i](p_dét_plur_nombre_nom)__
................................................................................
__[i](p_motion_de)__                    motions? (de (?:blâme|censure|défiance)) @@$ <<- ~1>> *
__[i](p_noix_de)__                      noix (de (?:cajou|p[ée]can|coco|lavage|muscade|veau|macadamia)) @@$ <<- ~1>> *
__[i](p_nu_comme_un_ver)__              nue?s? (comme (?:un ver|des vers)) @@$ <<- ~1>> *
__[i](p_numéro)__
    numéro (un|deux|trois|quatre|cinq|six|sept|huit|neuf|dix(?:-sept|-huit|-neuf|)|onze|douze|treize|quatorze|quinze|seize|vingt|trente|quarante|cinquante|soixante(?:-dix|)|quatre-vingt(?:-dix|)|cent|mille|\d+) @@$
    <<- before(r"\b[lL]a +$") =>> define(\0, [">numéro/:N:f:s"])
    <<- ~1>> *
__[i](p_oiseau_de)__                    oiseaux? (de (?:malheur|nuit|proie|mauvais augure)) @@$ <<- ~1>> *
__[i](p_onde_de_choc)__                 ondes? (de choc) @@$ <<- ~1>> *
__[i](p_orge)__                         orge (perlé|mondé|carré) @@$ <<- ~1>> *
__[i](p_noire_comme)__                  noire?s? (comme (?:la nuit|une nuit sans lune)) @@$ <<- ~1>> *
__[i](p_partie_de_jambe_en_l_air)__     parties? (de jambes en l’air) @@$ <<- ~1>> *

__[i](p_pièce_de)__                     pièces? (de (?:théâtre|monnaie|\d+ (?:euros?|centimes?|cents?|livres? sterling|shillings?))) @@$ <<- ~1>> *
__[i](p_pomme_de)__                     pommes? (de (?:discorde|terre|reinette|pin)|d’(?:Adam|api|amour|ambre|eau|or))  @@$  <<- ~1>> *
................................................................................
__[i](p_60_qqch)__
    soixante-(?:d(?:eux|ix|ouze)|tr(?:ois|eize)|quat(?:re|orze)|cinq|six|sept|huit|neuf|quinze|seize| et (?:un|onze)|-et-(?:un|onze))
    <<- ~>> soixante
__[i](p_80_qqch)__
    quatre-vingt-(?:un|d(?:eux|ix|ouze)|tr(?:ois|eize)|quat(?:re|orze)|cinq|six|sept|huit|neuf|onze|quinze|seize)
    <<- ~>> quatre-vingts
__[i](p_qqch_100)__
    ((?:d(?:eux|ouze)|tr(?:ois|eize)|quat(?:re|orze)|cinq|s(?:ix|seize)|sept|huit|neuf|onze|quinze) cents) +({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ].*:[pi]", ":(?:G|3p)") ~1>> cent
__[i](p_qqch_1000)__
    (?:deux|trois|quatre|cinq|six|sept|huit|neuf|cent) (?:cent |)mille
    <<- ~>> mille

__[i](p_det_plur_nombre_nom)__
    (?:le(?:ur|)s|des|ses|ces|mes|tes|nos|vos) +((?:quelque +|)(?:d(?:eux|ix|ouze)|tr(?:ois|eize|ente)|qua(?:t(?:re(?:-vingts|)|orze)|rante)|cinq(?:uante|)|s(?:ix|eize|oixante)|sept|huit|neuf|onze|quinze|vingt|cent|mille|\d+)) +({w_2})  @@w,$
    <<- morphex(\2, ":[NAQ].*:[pi]", ":(?:G|3p)") ~1>> *

__[i](p_une_heure)__
    (?:à |d(?:e +|’))une +heure(?: (?:d(?:eu|i)x|tr(?:ois|eize|ente)|qu(?:a(?:t(?:re|orze)|rante)|inze)|cinq(?:uante|)|s(?:ix|ept|eize)|huit|neuf|onze|douze|vingt|décente|(?:très |)tardive)|) <<- ~>> *
__[i](p_nombre_heure)__
    (?:à|de) (?:d(?:eu|i)x|tr(?:ois|eize)|qu(?:at(?:re|orze)|inze)|cinq|s(?:ix|ept|eize)|huit|neuf|onze|douze|vingt) +heures(?: (?:d(?:eu|i)x|tr(?:ois|eize|ente)|qu(?:a(?:t(?:re|orze)|rante)|inze)|cinq(?:uante|)|s(?:ix|ept|eize)|huit|neuf|onze|douze|vingt)|) <<- ~>> *

................................................................................
    le ({w_2}) (le plus) ({w_2})  @@3,w,$
    <<- morphex(\1, ":[NAQ].*:[me]", ":G") and morph(\3, ":[AQ].*:[me]", False) ~2>> *
__[i](p_la_xxx_la_plus_adj)__
    la ({w_2}) (la plus) ({w_2})  @@3,w,$
    <<- morphex(\1, ":[NAQ].*:[fe]", ":G") and morph(\3, ":[AQ].*:[fe]", False) ~2>> *
__[i](p_les_xxx_les_plus_adj)__
    (?:[lmts]es|nos|vos|leurs) ({w_2}) (les plus) ({w_2})  @@w,w,$
    <<- morphex(\1, ":[NAQ].*:[pi]", ":[123][sp]") and morph(\3, ":A.*:[pi]", False) ~2>> *
__[i](p_le_plus_le_moins)__
    (le (?:plus|moins)) ({w_2})  @@0,$
    <<- morph(\2, ":A", ":([me]:[si]|G)") and morph(word(-1), ">(?:avoir|être)/:V", False) ~1>> *
__[i](p_bien_sûr)__
    bien sûr(?! de) <<- ~>> *
__[i](p_bien_mal_fort_adj_adv)__
    (bien|mal|(?:fort|super) (?:bien|mal)|fort) +({w_2})  @@0,$
................................................................................


#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#


!!!! Redondances dans la phrase                                                                   !!

__[i]/redon2(redondances_phrase)__
    ({w_4})[ ,].* (\1)  @@0,$
    <<- not morph(\1, ":(?:G|V0)|>même/", False) -2>> _             # Dans cette phrase, répétition de « \1 » (à gauche).
    <<- __also__ -1>> _                                             # Dans cette phrase, répétition de « \1 » (à droite).

TEST: __redon2__ Quelle {{imposture}}, c’est d’un ennui, c’est une {{imposture}}.
TEST: __redon2__ ils sont là côte à côte.
................................................................................
TEST: __redon2__ De loin en loin, elle passe.
TEST: __redon2__ Les mêmes causes produisent/produisant les mêmes effets. (répétition)



!!
!!
!!!! Groupe nominal (1)                                                                           !!
!!
!!

#### 1 mot

## Usage impropre

................................................................................

TEST: ils trouvent ça de plus en plus {{idiots}}              ->> idiot



!!
!!
!!!! Groupe nominal (2)                                                                           !!
!!
!!

## Sans article

__[i]/gn(gn_2m_accord)__
    ^ *({w_2}) +({w_2})  @@*,$
................................................................................
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]", False, False)
    -2>> =switchGender(@, False)                                                                    # Accord de genre erroné entre « \1 » et « \2 ».
    <<- __also__ and hasFemForm(\1) -1>> =switchGender(@)                                           # Accord de genre erroné avec « \2 ».
    <<- not re.search("(?i)^air$", \1) and not \2.startswith("seul")
        and morph(\1, ":[si]") and morph(\2, ":[NAQ].*:p")
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]", False, False)
    -2>> =suggSing(@)                                                                               # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.

TEST: L’{{amande}} {{amer}}
TEST: l’{{amicale}} {{animal}}
TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
TEST: du chien et de l’{{étonnante}} {{collier}} qu’il avait autour du cou.


## un / une
................................................................................
__[i]/gn(gn_2m_le)__
    (?<!et |ou )(le) +({w_2}) +({w_2})  @@0,w,$
    <<- morph(\1, ":D", False) >>>
    <<- not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NAQ].*:f")
        and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
    -3>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
    <<- not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
    -3>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.
__[i]/gn(gn_2m_le_après_et_ou_de)__
    (?:et|ou) +(le) +({w_2}) +({w_2})  @@w,w,$
    <<- morph(\1, ":D", False) >>>
    <<- not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[me]", ":(?:B|G|V0|f)") and morph(\3, ":[NAQ].*:f")
        and not apposition(\2, \3) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -3>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
    <<- not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\2, \3) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -3>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.

TEST: le test très {{cons}} qu’on a passé hier.
TEST: c’était le chien {{perdue}} des voisins.
TEST: viens vite ou le pari {{imperdables}} sera moins facile…


__[i]/gn(gn_2m_det_mas_sing)__
    (?<!et |ou |de )(?:cet?|quel|au|ledit) +({w_2}) +({w_2})  @@w,$
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[me]", ":(?:B|G|V0)") and morph(\2, ":[NAQ].*:f")
        and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
    -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
    -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
__[i]/gn(gn_2m_det_mas_sing_après_et_ou_de)__
    (?:et|ou|de) +(?:cet?|quel|au|ledit) +({w_2}) +({w_2})  @@w,$
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[me]", ":(?:B|G|V0|f)") and morph(\2, ":[NAQ].*:f")
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.

TEST: cet outil {{terribles}} qu’il a dans les mains
TEST: J’aimerais connaître de quel parti {{gauchistes}} on parle.


__[i]/gn(gn_2m_mon_ton_son)__
    (?<!et |ou |de )[mts]on +({w_2}) +({w_2})  @@w,$
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:m", ":(?:B|G|e|V0|f)") and morph(\2, ":[NAQ].*:f")
        and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
    -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\1, \2) and not before(r"\b(?:et|ou|de) +$")
    -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.
__[i]/gn(gn_2m_mon_ton_son_après_et_ou_de)__
    (?:et|ou|de) +[mts]on +({w_2}) +({w_2})  @@w,$
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:m", ":(?:B|G|e|V0|f)") and morph(\2, ":[NAQ].*:f")
        and not apposition(\1, \2) and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -2>> =suggMasSing(@, True)                                                                      # Accord de genre erroné : « \1 » est masculin, « \2 » est féminin.
    <<- not \2.startswith("seul")
        and morphex(\1, ":[NAQ].*:[si]", ":G") and morphex(\2, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\1, \2)
        and not morph(word(-1), ":[NAQ]|>(?:et|ou)/", False, False)
    -2>> =suggMasSing(@)                                                                            # Accord de nombre erroné avec « \1 » : « \2 » devrait être au singulier.

TEST: il brandissait avec fougue son drapeau {{déchirés}}
TEST: comment osez-vous médire de mon héritage {{glorieuse}}


__[i]/gn(gn_2m_la)__
    (?<!et |ou |de )(la) +({w_2}) +({w_2})  @@0,w,$
    <<- morph(\1, ":D", False) >>>
    <<- \2 != "fois" and not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NAQ].*:m")
        and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
    -3>> =suggFemSing(@, True)                                                                      # Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
    <<- not \3.startswith("seul")
        and morphex(\2, ":[NAQ].*:[si]", ":G") and morphex(\3, ":[NAQ].*:p", ":[GWsi]")
        and not apposition(\2, \3) and not before(r"\b(?:et|ou|de) +$")
    -3>> =suggFemSing(@)                                                                            # Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.
__[i]/gn(gn_2m_la_après_et_ou_de)__
    (?:et|ou|de) +(la) +({w_2}) +({w_2})  @@w,w,$
    <<- morph(\1, ":D", False) >>>
    <<- \2 != "fois" and not \3.startswith("seul")
................................................................................
TEST: Les couleurs rouge, jaune et verte ne doivent pas être utilisées
TEST: des passeports américain, canadien, néerlandais, allemand et britannique.



!!
!!
!!!! Groupe nominal (3)                                                                           !!
!!
!!

## nombre

__[i]/gn(gn_3m)__
    ^ *({w_2}) +({w_2}) +({w_3})  @@*,w,$
................................................................................

TEST: ces petites sottes {{déjantée}}



!!
!!
!!!! Groupe nominal: Accords avec de / des / du                                                   !!
!!
!!

__[i]/gn(gn_devinette1)__
    (?:[lmts]a|une|cette) +{w_2} +d(?:e (?:[lmts]a|cette)|’une) +(?!des )({w_2}) +({w_2})  @@w,$
    <<- morphex(\2, ":[NAQ].*:(?:m|f:p)", ":(?:G|P|[fe]:[is]|V0|3[sp])") and not apposition(\1, \2)
    -2>> =suggFemSing(@, True)                                                              # Accord erroné : « \2 » devrait être au féminin singulier.
................................................................................

TEST: {{de telles sorte}}



!!
!!
!!!! Singuliers & Pluriels                                                                        !!
!!
!!

#### Prépositions

# Similaires à prépositions : http://www.synapse-fr.com/manuels/PP_ATTENDU.htm
# attendu, compris, non-compris, y compris, entendu, excepté, ôté, ouï, passé, supposé, vu
................................................................................
TEST: Son point de {{vus}} prévaudra toujours, faites-vous à cette idée ou dégagez.
TEST: de mon point de {{vues}}



!!
!!
!!!! Confusions                                                                                   !!
!!
!!

# à / a
__[i]/conf(conf_suite_à)__
    suite (a) ({w1}) @@w,$
    <<- morph(\2, ":D|>[ld]/", False) and isStart() -1>> à          # Confusion : “a” est une forme conjuguée du verbe “avoir”. Pour la préposition, écrivez “à”.
................................................................................


__[i]/conf(conf_âcre)__
    acres?
    <<- morph(word(-1), ">(?:être|go[ûu]t|humeur|odeur|parole|parfum|remarque|reproche|réponse|saveur|senteur|sensation|vin)/", False, False)
    ->> =\0.replace("a", "â").replace("A", "Â")
    # Confusion probable : “acre” est une unité de surface agraire. Pour l’adjectif signifiant “irritant”, écrivez :|https://fr.wiktionary.org/wiki/%C3%A2cre

TEST: Il avait ce goût {{acre}} dans la bouche qui ne passait pas.


# accro / accroc
__[i]/conf(conf_être_accro)__
    ({etre}|dev\w+|sembl\w+|par\w+|rend\w+) +(accrocs?)  @@0,$
    <<- morph(\1, ">(?:être|devenir|para[îi]tre|rendre|sembler)/", False)
................................................................................
TEST: Nous avons déconné, nous avons été mis à {{l’amande}}.
TEST: Ces gens-là ne feront jamais {{amande honorable}}.


# annales / anal-e-s
__[i]/conf(conf_annales1)__
    (anale?s?) (?:littéraires?|politiques?|ecclésiastiques?|du (?:bac(?:calauréat|)|brevet)|de (?:physique|chimie|mathématiques|biologie|géographie)|d’histoire)  @@0
    <<- -1>> annales                                                 # Confusion : “\1” est l’adjectif relatif à l’anus.|http://fr.wiktionary.org/wiki/annales
__[i]/conf(conf_annales2)__
    [lcdmts]es (anale?s?)  @@4
    <<- -1>> annales                                                 # Confusion : “\1” est l’adjectif relatif à l’anus.|http://fr.wiktionary.org/wiki/annales

TEST: des {{anales}} littéraires
TEST: il a bachoté les {{anales}}.

................................................................................
TEST: Les pays ibériques et scandinaves ont signé le traité.
TEST: Les gouvernements espagnol et mexicain ont signé le traité.
TEST: Béatrice Dalle et Claude


__[i]/conf(conf_où_est)__
    où (et) +({w_1}) @@w,$
    <<- morphex(\2, ":D", ":R|>(?:quand|pourquoi)") or (\2 == "l" and after("^’"))
    -1>> est                                                                        # Confusion probable : “et” est une conjonction de coordination. Pour le verbe être à la 3ᵉ personne du singulier, écrivez :

TEST: où {{et}} cet ennemi ?
TEST: où {{et}} l’homme qui est passé ce matin ?
TEST: Je veux savoir où et quand, où et pouquoi.
TEST: où et avec qui ?

................................................................................

TEST: j’ai vu un {{flamand}} rose.


# foi / fois
__[i]/conf(conf_bonne_mauvaise_foi)__
    (mauvaise|bonne) (fois)  @@0,$
    <<- not ( \1 == "bonne" and before(r"(?i)\bune +$") and after("(?i)^ +pour toute") )
    -2>> foi                                                                                        # Confusion probable.|http://fr.wiktionary.org/wiki/foi
__[i]/conf(conf_faire_perdre_donner_foi)__
    ((?:f[aieî]|perd|donn|[ae])\w*) (fois) @@0,$
    <<- morph(\1, ">(?:faire|perdre|donner|avoir)/", False) -2>> foi                                      # Confusion probable.|http://fr.wiktionary.org/wiki/foi

TEST: C’est une personne de bonne {{fois}}.
TEST: Mais il a perdu {{fois}} en l’avenir.
................................................................................
#    <<- not morph(word(-1), ":D", False, False)
#    ->> quelquefois
#    # Confusion probable : « quelquefois » est un adverbe qui signifie « parfois » ; ne pas confondre avec les quelques fois qu’il est advenu ou qu’il adviendra quelque chose.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4334


__[i]/conf(conf_quelquefois_quelques_fois)__
    qu(?: elles? que fois?|elles? que fois?|elque fois) <<- ->> quelquefois|quelques fois
    # Confusion. Utilisez « quelquefois » si vous voulez dire « parfois ». Utilisez « quelques fois » pour évoquer ce qui est advenu ou adviendra plusieurs fois.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4334

TEST: {{Quelles que fois}}, on y comprend plus rien.
TEST: {{Qu’elle que fois}}, on y comprend plus rien.
TEST: Il y va {{quelque fois}} par an.


# quoique / quoi que
................................................................................
__[i]/conf(conf_prep_soi)__
    (?:chez|don de|sur|avec|pour) (soit) @@$ <<- not after(" soit ") -1>> soi                       # Confusion probable.
__[i]/conf(conf_en_soi)__
    (?<!’)en (soit)  @@3
    <<- morph(word(1), ":[GY]", True, True) and not before("(?i)quel(?:s|les?|) qu $|on $|il $") and not after(" soit ")
    -1>> soi                                                                                        # Confusion probable.
__[i]/conf(conf_quel_que_soit2)__
    quel(?:le|)s? que (soi(?:es?|)) @@$ <<- -1>> soit|soient                                        # Confusion probable.
__[i]/conf(conf_soi_même1)__
    (soi[tes]s? mêmes?) @@$
    <<- morph(word(-1), ":[YQ]|>(?:avec|contre|par|pour|sur)/", False, True) -1>> soi-même          # Confusion probable : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.
__[i]/conf(conf_soi_même2)__
    soi[tes]s?-mêmes? <<- ->> soi-même                                                              # Confusion : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.

TEST: chez {{soit}}, c’est presque toujours mieux.
................................................................................


# nouveau / nouvel
# TODO



!!!! Mots composés                                                                                !!

__[i]/mc(mc_mot_composé)__
    ({w2})-({w2})  @@0,$
    <<- not \1.isdigit() and not \2.isdigit()
        and not morph(\0, ":", False) and not morph(\2, ":G", False) and spell(\1+\2)
    ->> \1\2                                                                                        # Vous pouvez ôter le trait d’union.
    <<- \2 != "là" and not re.search("(?i)^(?:ex|mi|quasi|semi|non|demi|pro|anti|multi|pseudo|proto|extra)$", \1)
................................................................................

TEST: __mc__ des {{portes-avions}}.



!!
!!
!!!! Casse: majuscules et minuscules                                                              !!
!!
!!

# Les jours
__[s]/maj(maj_jours_semaine)__
    (?:Lundi|Mardi|Mercredi|Jeudi|Vendredi|Samedi|Dimanche)
    <<- before(r"[\w,] +$") ->> =\0.lower()
................................................................................
!!
!!
!!
!!
!!
!!
!!
!!! Conjugaisons                                                                                  !!
!!
!!
!!
!!
!!
!!
!!
................................................................................
!!
!!
!!


!!
!!
!!!! Infinitif                                                                                    !!
!!
!!

__[i]/infi(infi_à_en)__
    à en ({w_2}) @@5
    <<- morphex(\1, ":V", ":Y") -1>> =suggVerbInfi(@)                                               # Le verbe devrait être à l’infinitif.

................................................................................
    -2>> =suggVerbPpas(\2, ":p")                                                    # Confusion probable : “\2” est à verbe à l’infinitif. Pour l’adjectif, écrivez :

TEST: les documents {{scanner}} ne sont pas lisibles.
TEST: tes doutes {{remâcher}} deviennent difficiles à vivre.



!!!! Participes présents                                                                          !!

__[i]/conj(conj_participe_présent)__  (?:ne|lui|me|te|se|nous|vous) ({w_2}ants)  @@$
    <<- morph(\1, ":A", False) -1>> =\1[:-1]                                                        # Un participe présent est invariable.|http://fr.wiktionary.org/wiki/participe_pr%C3%A9sent

TEST: nous {{épuisants}} à la tâche pour des clopinettes, nous défaillîmes.



!!!
!!!
!!! Processeur: simplification des substantifs                                                    !!
!!!
!!!

### @ : we remove @ we introduced after le/la/les in some cases
__<s>(p_arobase)__      @ <<- ~>> *

### Avant les verbes (ôter seulement les COI!)
................................................................................
TEST: Je me doute bien que vous avez trouvé la réponse.
TEST: Nous nous doutons bien qu’il y a une entourloupe derrière cette affaire.
TEST: Notre but n’était pas de devenir célèbres.
TEST: sans qu’on ait à le lui ordonner



!!!! OCR                                                                                          !!

# Participes passés
__[i]/ocr(ocr_être_participes_passés)__
    ({etre}) +({w_2}es?) @@0,$
    <<- morph(\1, ":V0e", False) >>>
    <<- \2.endswith("e") and morphex(\2, ":V1.*:Ip.*:[13]s", ":(?:[GM]|A)") and not before(r"(?i)\belle +(?:ne +|n’|)$")
    -2>> =suggVerbPpas(\2, ":m:s")                                                                  # Erreur de numérisation ?
................................................................................
TEST: __ocr__ elle avait envie de s’en sortir enfin.
TEST: __ocr__ la longueur de la circonférence étant égale à…
# TEST: __ocr__ vous êtes {{presses}} de monter à bord de ce train-ci.
# Fonctionne avec nous serons, mais pas nous sommes (bug de JavaScript?)



!!!! Confusions                                                                                   !!

## guerre / guère
__[i]/conf(conf_ne_pronom_pronom_verbe_guère)__
    ne (?:[mts]e|la|les?|[nv]ous|lui|leur) (?:la |les? |lui |leur |l’|)\w{w_2} (?:plus |)(guerre)  @@$
    <<- -1>> guère                                                                                  # Confusion. La guerre est conflit. Pour l’adverbe signifiant “peu”, écrivez :

TEST: tout ceci ne me rapporte {{guerre}}
................................................................................
    ({aller}) +de (soi[tes])  @@0,$
    <<- morph(\1, ">aller/", False) and not after(" soit ") -2>> soi                                # Confusion.|https://fr.wiktionary.org/wiki/aller_de_soi

TEST: cela ne va pas de {{soit}}.



!!!! Adverbes après verbe                                                                         !!

# fort
__[i]/sgpl(sgpl_verbe_fort)__
    ({w_2}) +(forts)  @@0,$
    <<- morphex(\1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q)|>(?:affirmer|trouver|croire|désirer|estime|préférer|penser|imaginer|voir|vouloir|aimer|adorer|souhaiter)/")
        and not morph(word(1), ":A.*:[me]:[pi]", False)
    -2>> fort                                               # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.
................................................................................
TEST: Il a de grands biens.
TEST: Ce sont des biens de peu de valeur.



!!
!!
!!!! Infinitif                                                                                    !!
!!
!!

__[i]/infi(infi_d_en_y)__
    d’(?:en|y) +({w_2})  @@$
    <<- morphex(\1, ":V", ":Y") -1>> =suggVerbInfi(@)                                               # Le verbe devrait être à l’infinitif.

................................................................................

TEST: lui {{mangée}} beaucoup.



!!
!!
!!!! Usage pronominal avec “avoir” au lieu d’“être”                                               !!
!!
!!

__[i]/conj(conj_se_conf_être_avoir)__
    (s’)(?:en +|y+ |)({avoir})  @@0,$
    <<- morph(\2, ">avoir/", False) >>>
    <<- morph(\2, ":3p", False) -2>> sont|étaient|seront|seraient                                   # Confusion. Sous sa forme pronominale, un verbe s’emploie avec l’auxilaire “être”, non “avoir”.
................................................................................
TEST: {{nous}} nous {{avons}} donné le temps
TEST: {{vous}} vous {{avez}} perdu toute notion de décence.



!!
!!
!!!! Participes passés: se +être +verbe                                                           !!
!!
!!

__[i]/ppas(ppas_je_me_être_verbe)__
    je +(?:ne +|)m(?:e +|’(?:y +|))(?:s[uo]i[st]|étai[st]|fu(?:sses?|s|t)|serai[st]?) +({w_3}) @@$
    <<- morphex(\1, ":Q.*:p", ":(?:G|Q.*:[si])") and ( morph(\1, ":V[123]_.__p_e_") or (isRealEnd() and not before(r"\b[qQ]ue? +$")) )
    -1>> =suggVerbPpas(\1, ":m:s")                                                                  # Si ce participe passé se rapporte bien à “je”, il devrait être au singulier.
................................................................................
TEST: des soins que je m’étais donnés.
TEST: Si t’es pas contente, t’achètes pas.



!!
!!
!!!! Participes passés: se +laisser +adjectif                                                     !!
!!
!!

__[i]/ppas(ppas_me_te_laisser_adj)__
    ([mt]e|l[ae]) +(laiss\w*) +({w_3})  @@0,w,$
    <<- morph(\2, ">laisser/", False) and  morphex(\3, ":[AQ].*:p", ":(?:[YG]|[AQ].*:[is])")
    -3>> =suggSing(@)                                                                               # Accord avec « \1 » : « \3 » devrait être au singulier.
................................................................................
__[i]/ppas(ppas_avoir_été)__
    (({avoir}) +été) +({w_2})  @@0,0,$
    <<- morph(\2, ":V0a", False) >>>
    <<- morphex(\3, ":[123]s", ":[GNAQWY]") -3>> =suggVerbPpas(@)           # Après « avoir été », il faut un participe passé.
    <<- not before("[çcCÇ]’$|[cC]e n’$|[çÇ]a (?:n’|)$") and not before("(?i)^ *ne pas ") and not morph(word(-1), ":Y", False) >>>
    <<- morphex(\3, ":Y", ":A") -1>> _                                      # Tournure familière. Utilisez « être allé » plutôt que « avoir été ».
    <<- morphex(\3, ":V1..t.*:Y", ":A") -3>> =suggVerbPpas(@)               # Incohérence. Après « avoir été », il faut un participe passé (à moins que « avoir été » signifie ici « être allé »).

TEST: j’ai été {{instruis}} par elle
TEST: avoir été {{prit}} par surprise
TEST: Ils {{ont été}} {{réaliser}} à partir d’éléments naturels.
TEST: J’{{ai été}} camper dans les Alpes.
TEST: Tu {{as été}} prendre du bois.
TEST: J’{{ai été}} {{chercher}} du pain.
TEST: Mon grand-père aurait été fier.
................................................................................
TEST: elles doivent être {{fâché}}
TEST: elles doivent avoir été {{attaqué}}
TEST: elles peuvent avoir été {{trompé}}
TEST: elles souhaitent être plus {{considérée}}



!!!! Participes passés: accord en nombre avec la conjugaison de « être »                          !!

## Contrôle de l’
__[i]/ppas(ppas_être_accord_singulier)__
    ({w_2}) +(?:qui +|)(?:ne +|n’|)(?:est|était|f[uû]t|sera(?:it|)|a(?:vait|ura|urait|it|) +été|e[uû]t +été) +({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ].*:p", ":[GMWYsi]") and not morph(\1, ":G", False)
    -2>> =suggSing(@)                                                        # Accord avec « être » : « \2 » devrait être au singulier.

__[i]/ppas(ppas_être_accord_pluriel)__
    ({w_2}) +(?:qui +|)(?:ne +|n’|)(?:sont|étaient|fu(?:r|ss)ent|ser(?:ont|aient)|soient|ont +été|a(?:vaient|uront|uraient|ient) +été|eu(?:r|ss)ent +été) +({w_2})  @@0,$
    <<- not re.search("(?i)^légion$", \2) and morphex(\2, ":[NAQ].*:s", ":[GWYpi]") and not morph(\1, ":G", False)
    -2>> =suggPlur(@)                                                        # Accord avec « être » : « \2 » devrait être au pluriel.


!!!! Participes passés: accord en genre avec le substantif précédent                              !!

__[i]/ppas(ppas_sujet_être_accord_genre)__
    (?<![dD]’)(une? |les? |la |l’|ce(?:s|t|tte|) |[mts](?:on|a|es) |[nv]os |leurs? ) *({w_2}) +(?:qui +|)(?:ne +|n’|)(?:est|étai(?:en|)t|f[uû]t|sera(?:i(?:en|)t|)|soi(?:en|)t|s(?:er|)ont|fu(?:r|ss)ent) +({w_2})  @@0,w,$
    <<- not re.search("(?i)^légion$", \3)
        and ((morphex(\3, ":[AQ].*:f", ":[GWme]") and morphex(\2, ":m", ":[Gfe]")) or (morphex(\3, ":[AQ].*:m", ":[GWfe]") and morphex(\2, ":f", ":[Gme]")))
        and not ( morph(\3, ":p", False) and morph(\2, ":s", False) )
        and not morph(word(-1), ":(?:R|P|Q|Y|[123][sp])", False, False) and not before(r"\b(?:et|ou|de) +$")
................................................................................
TEST: Martine n’est pas {{marié}}.
TEST: Martine est très {{intelligent}}.
TEST: Martine n’est pas très {{intelligent}}.
TEST: Pierre est {{dominée}} par son adversaire.



!!!! Accords avec l’adjectif précédant le pronom                                                  !!

__[i]/ppas(ppas_adj_accord_je_tu)__
    ^ *({w_2}s),? (je?|tu)  @@*,$
    <<- morphex(\1, ":A.*:p", ":(?:G|E|M1|W|s|i)")
    -1>> =suggSing(@)                                                       # Si cet adjectif se réfère au pronom « \2 », l’adjectif devrait être au singulier (et accordé en genre).

TEST: {{Découragés}}, je suis parti.
................................................................................
TEST: Elles se sont {{rendues}} compte
TEST: La puissance publique s’en est-elle rendu compte ?



!!
!!
!!!! Inversion verbe/sujet                                                                        !!
!!
!!
__[i]/ppas(ppas_inversion_être_je)__
    (?:s[ou]is|étais|fus(?:sé|)|serais?)-je +({w_2})  @@$
    <<- morphex(\1, ":(?:[123][sp]|Y|[NAQ].*:p)", ":[GWsi]")
    -1>> =suggSing(@)                                                        # Accord avec le sujet « je » : « \1 » devrait être au singulier.
__[i]/ppas(ppas_inversion_être_tu)__
................................................................................
TEST: Ne sommes-nous pas {{aveugle}}
TEST: Que se sont-ils dit ?
TEST: Est-il question de ceci ou de cela ?
TEST: Est-ce former de futurs travailleurs ou bien des citoyens



## Accord et incohérences
__[i]/ppas(ppas_sont)__
    sont ({w_2})  @@5
    <<- morphex(\1, ":[NAQ]", ":[QWGBMpi]") and not re.search("(?i)^(?:légion|nombre|cause)$", \1) and not before(r"(?i)\bce que?\b")
    -1>> =suggPlur(@)               # Incohérence : « \1 » est au singulier. Ou vous confondez « sont » et « son », ou l’accord en nombre est incorrect.
    <<- __else__ and morphex(\1, ":V", ":(?:N|A|Q|W|G|3p)") and not before(r"(?i)\bce que?\b")
    -1>> =suggVerbPpas(\1, ":m:p")  # Incohérence : « \1 » n’est pas un participe passé.

TEST: après avoir mis à jour sont {{profile}}.



!!
!!
!!!! Se croire/considérer/montrer/penser/révéler/savoir/sentir/voir/vouloir + participe passé/adj !!
!!
!!

__[i]/ppas(ppas_je_me_verbe)__
    je +(?:ne +|)me +((?:s[eauû]|montr|pens|rév|v[oiîe])\w+) +({w_2})  @@w,$
    <<- morph(\1, ">(?:montrer|penser|révéler|savoir|sentir|voir|vouloir)/", False) and morphex(\2, ":[NAQ].*:p", ":[GWYsi]")
    -2>> =suggSing(@)                                                        # Accord avec le sujet « je » : « \2 » devrait être au singulier.
................................................................................
TEST: mais les considérer uniquement ainsi fait perdre la signification politique de leur geste.
TEST: nous considérer ainsi fait le lit de la haine…



!!
!!
!!!! Avoir + participes passés                                                                    !!
!!
!!

#__[i]/conj__  fait(s|e|es) ({w1}) <<- morph(\2, ":V") and not morph(\2, ":Y")
#   ->> fait \1                      # Le participe passé de faire reste au masculin singulier s’il est suivi par un verbe à l’infinitif.

__[i](p_les_avoir_fait_vinfi)__
................................................................................
TEST: c’est vous qui m’avez {{convertit}}.
TEST: parce que t’as envie que je le fasse



!!
!!
!!!! COD précédant que                                                                            !!
!!
!!

__[i]/ppas(ppas_det_plur_COD_que_avoir)__
    ([ldmtsc]es) +({w_2}) +que? +(?:j’|tu |ils? |[nv]ous |elles? |on ) *(?:ne +|n’|)({avoir}) +({w_2}[éiust]e?)(?! [mts]’)  @@0,w,w,$
    <<- morph(\3, ":V0a", False)
        and not ((re.search("^(?:décidé|essayé|tenté|oublié)$", \4) and after(" +d(?:e |’)")) or (re.search("^réussi$", \4) and after(" +à")))
................................................................................
    <<- __also__ and \1 == "a" and \2.endswith("r") and not before(r"(?i)\b(?:[mtn]’|il +|on +|elle +)$")
    -1>> à                                                                                          # Confusion probable : “a” est une conjugaison du verbe avoir. Pour la préposition, écrivez :

TEST: Avoir {{marcher}} toute la journée m’a épuisée.



!!!! du / dû                                                                                      !!

__[i]/ppas(ppas_avoir_dû_vinfi)__
    ({avoir}) +(due?s?) +(?:[mts]’|)({w_2})  @@0,w,$
    <<- morph(\1, ":V0a", False) and (morph(\3, ":Y") or re.search("^(?:[mtsn]e|[nv]ous|leur|lui)$", \3))
    -2>> dû                                                                                         # Participe passé de devoir : « dû ».

__[i]/ppas(ppas_avoir_pronom_du_vinfi)__
................................................................................
TEST: Ont-ils {{signer}} le contrat ?
TEST: Ai-je déjà {{signez}} le contrat ?
TEST: A-t-il déjà {{signer}} le contrat ?


!!
!!
!!!! Participes passés avec formes interrogatives                                                 !!
!!
!!

__[i]/ppas(ppas_avoir_pronom1)__
    (?<![ltm]’)({avoir})[- ](?:je|tu|ils?|elles?|t-(?:ils?|elles?|on)|on) +({w2})  @@0,$
    <<- morph(\1, ":V0a", False) and morphex(\2, ":(?:Y|2p|Q.*:[fp])", ":m:[si]") and \2 != "prise"
        and not morph(word(-1), ">(?:les|[nv]ous|en)|:[NAQ].*:[fp]", False) and not before(r"(?i)\b(?:quel(?:le|)s?|combien) ")
................................................................................
    <<- morph(\1, ":V0a", False) and morphex(\2, ":(?:Y|2p|Q.*:[fp])", ":m:[si]") and \2 != "prise"
        and not morph(word(-1), ">(?:les|[nv]ous|en)|:[NAQ].*:[fp]", False) and not before(r"(?i)\b(?:quel(?:le|)s?|combien) ")
    -2>> =suggMasSing(@)
    # Avec « avoir », il faut un participe passé au masculin singulier.

__[i]/ppas(ppas_l_m_t_avoir_pronom)__
    ([ltm]’)({avoir})[- ](?:je|tu|ils?|elles?|t-(?:ils?|elles?|on)|[nv]ous|on) +({w2}s)  @@0,2,$
    <<- morph(\2, ":V0a", False) and morphex(\3, ":(?:Y|2p|Q.*:p)", ":[si]")
    -3>> =suggMasSing(@)
    # Accord avec le COD « \1 » : e participe passé « \2 » devrait être au singulier (et accordé en genre).

__[i]/ppas(ppas_les_avoir_pronom)__
    les +({avoir})-(?:je|tu|ils?|elles?|t-(?:ils?|elles?|on)|[nv]ous|on) +({w_1}(?:[éiut]e?|is|se))  @@w,$
    <<- morph(\1, ":V0a", False) and morphex(\2, ":V[123]..t.*:Q.*:s", ":[GWpi]")
    -2>> =suggPlur(@)
................................................................................


__[i]/conj(conj_vous_verbe2)__
    vous [nm](?:e +(?:les? |l’|la |[nv]ous |)|’)({w_3})  @@$
    <<- morphex(\1, ":V", ":2p") and isStart() -1>> =suggVerb(@, ":2p")         # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.

TEST: vous ne l’{{avait}} pas vu.
TEST: je crois, vous m’{{avais}} trompé…


## se + incohérence
__[i]/conj(conj_se_incohérence)__
    s(?:e +(?:les? +|la +|)|’(?:en +|y +|))({w_2}(?:e[zs]|ons|is|us))  @@$
    <<- morphex(\1, ":2s", ":3[sp]") -1>> =suggVerb(@, ":3s")                   # Incohérence. Avec le pronom “se”, le verbe ne peut être à la deuxième personne du pluriel.
    <<- __else__ and morphex(\1, ":1p", ":3[sp]") -1>> =suggVerb(@, ":3p")      # Incohérence. Avec le pronom “se”, le verbe ne peut être à la deuxième personne du pluriel.
................................................................................
TEST: se {{considérez}} comme un génie…
TEST: se {{rencontrerons}} demain grands et petits.
TEST: se {{crois}} élu par Dieu…
TEST: avec ceux se trouvant sur leur chemin



!!!! Confusions ou/où                                                                             !!

__[i]/conf(conf_det_nom_où_pronom)__
    ^ *(?:l(?:es? +|a +|’)|[nv]o(?:s|tre) +|ce(?:t|tte|s|) +|[mts](?:es|on|a) +|des +)({w_2}) +(ou) +(?:je|tu|ils?|elles? +> +\w+|[nv]ous +> +\w+)  @@w,w
    <<- morphex(\1, ":[NAQ]", ":G")
    -2>> où                                                                         # Confusion probable. Pour évoquer un lieu ou un moment, écrivez :|http://fr.wiktionary.org/wiki/o%C3%B9

TEST: L’hôtel {{ou}} ils sont allés l’été dernier.




!!!
!!!
!!! Processeur avant impératif                                                                    !!
!!!
!!!

__<i>(p_n_importe_qui_quoi)__       n(’)importe quo?i @@1 <<- ~1>> `


__<i](p_premier_ne_pro_per_obj1)__
................................................................................
TEST: Ne manquer de rien.
TEST: Ne jamais miser sur ces tocards.
TEST: Ne m’en rien laisser.


!!
!!
!!!! Impératif !                                                                                  !!
!!
!!

# Confusions
__[i]/imp(imp_confusion_2e_pers_pluriel)__
    ({w_2}(?:er|ai[st]|ée?s?)) (moi|l(?:es?|a|eur|ui)|nous|vous)  @@0,$
    <<- morph(\1, ":V", False) and isStart() >>>
................................................................................
TEST: {{Vas}} au diable !
TEST: {{Écartes}} de moi cette coupe.
TEST: explique-{{leurs}} de quoi il est question.


!!
!!
!!!! Impératif: traits d’union manquants                                                          !!
!!
!!

__[i]/imp(imp_union_moi_toi)__
    (?<!’)({w_2}) ([mt]oi)(?! même)  @@0,$
    <<- morphex(\1, ":E", ":[GM]")
    ->> \1-\2
................................................................................
TEST: {{vas y}}, ce n’est pas dangereux
TEST: {{convenez en}}, c’est une belle affaire malgré son prix élevé



!!!
!!!
!!! Processeur: destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.  !!
!!!
!!!

# Brainfuck (ici, prudence !)
__[i](p_pro_per_obj01)__
    (ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
................................................................................
    <<- __also__ ~1>> *
# Fin du Brainfuck



!!
!!
!!!! Confusions                                                                                   !!
!!
!!

#### CONFUSION a / à
__[i]/conf(conf_pronom_verbe_à)__
    ^ *(?:je|tu|ils?|on|elles?) +({w_2}) +(a)  @@w,$
    <<- morph(\1, ":V", False) and \2 != "A"
................................................................................
TEST: La révolution est crainte.
TEST: Je n’en ai cure.
TEST: Notre communauté vous est redevable.
TEST: l’humour est affaire de culture
TEST: Aller chercher l’air pur à la campagne est peine perdue.


#### CONFUSION veillez/veuillez

__[i]/conf(conf_veillez2)__
    (veuillez) +à +(ne|{infi})  @@0,$
    <<- isStart() and morph(\2, ":Y|>ne/", False) -1>> veillez          # Confusion probable : “veuillez” est une forme conjuguée du verbe “vouloir”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1939

TEST: {{Veuillez}} à ne pas tomber dans ce piège.
TEST: Et {{veuillez}} surtout à ouvrir grand les yeux.
................................................................................
TEST: Veillez à éviter de faire des fautes.
TEST: Veillez votre mari qui est malade.



!!
!!
!!!! Infinitif                                                                                    !!
!!
!!

__[i]/infi(infi_comment_où)__
    (?:comment|où) +({w_2}(?:ée?s?|ez))  @@$
    <<- morphex(\1, ":V", ":M") and not (\1.endswith("ez") and after(" +vous"))
    -1>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.
................................................................................
TEST: ils sont {{tromper}} par tous ces hypocrites.
TEST: Jeûner n’est pas seulement cesser de manger.
TEST: Ne pas aimer n’est pas oublier l’autre.


!!
!!
!!!! Conjugaison                                                                                  !!
!!
!!

## 1sg
__[i]/conj(conj_j)__
    j’({w_1})  @@2
    <<- morphex(\1, ":V", ":1s|>(?:en|y)/") >>>
................................................................................
TEST: un des hommes qui vient.
TEST: une des dames qui se sentent mal à l’aise dans cet avion est venue nous trouver.
TEST: l’un des chants les plus diffusés pendant la Révolution culturelle


__[i]/conj(conj_infi)__
    ^ *({infi}) +({w_2})  @@*,$
    <<- morph(\1, ":Y", False) and morph(\2, ":V.[a-z_!?]+(?!.*:(?:3s|P|Q|Y|3p!))")
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: manger {{fais}} grossir.
TEST: boire immodérément {{nuis}} à la santé


__[i]/conj(conj_det_sing_nom)__
................................................................................
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « des \1… ». Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Des hommes {{arrive}}.
TEST: Des femmes ne {{demande}} rien.
TEST: des femmes qui {{conduise}} la marche du monde.


!!!! Quel(le) que soit / quel(le)s que soient                                                     !!

# singulier
__[i]/conj(conj_quel_quelle_que_3sg1)__
    quel(?:le|)s? que ([sf]\w+) +(?:l[ea]|ce(?:t|tte|)|[mts](?:a|on)|[nv]otre|leur)  @@w
    <<- morphex(\1, ":V0e", ":3s")
    -1>> =suggVerb(@, ":3s")                                                             # Conjugaison erronée. Mettez “être” à la 3ᵉ personne du singulier.

................................................................................
TEST: Samantha et Eva {{viennes}} demain.
TEST: Samantha et Eva leur {{décrive}} une leçon.



!!
!!
!!!! Inversion verbe sujet                                                                        !!
!!
!!

__[i]/conj(conj_que_où_comment_verbe_sujet_sing)__
    (?:que?|où|comment|combien|dont|quand|pourquoi) +({w1}) (l(?:e(?:ur | )|a |’)|[mts](?:on|a) |ce(?:t|tte|) |[nv]otre |du ) *(?!plupart|majorité)({w1})  @@w,w,$
    <<- morphex(\1, ":(?:[12]s|3p)", ":(?:3s|G|W|3p!)") and not after("^ +(?:et|ou) (?:l(?:es? |a |’|eurs? )|[mts](?:a|on|es) |ce(?:tte|ts|) |[nv]o(?:s|tre) |d(?:u|es) )")
    -1>> =suggVerb(@, ":3s")                                                        # Conjugaison erronée. Accord avec « \2 \3… ». Le verbe devrait être à la 3ᵉ personne du singulier.
................................................................................
TEST: {{puisse}} les hommes enfin comprendre leurs erreurs.                         ->> puissent
TEST: {{puisses}} notre ennemi trembler de peur devant notre courage.               ->> puisse



!!
!!
!!!! Formes interrogatives ?                                                                      !!
!!
!!

__[i]/inte(inte_union_xxxe_je)__
    (?<![jJ]’)({w_2}[éèe]) je  @@0
    <<- morphex(\1, ":V.*:1[sŝś]", ":[GNW]") and not before(r"(?i)\bje +$") and morphex(word(1), ":", ":(?:Oo|X|1s)", True)
    ->> =\1[:-1]+"é-je"                                                                             # Forme interrogative ? Mettez un trait d’union.
................................................................................
    -1>> =suggSimil(\1, ":3p", False)                                                               # Forme interrogative : « \1 » n’est pas un verbe à la 3ᵉ personne du pluriel.

TEST: {{attaquant}}-ils                                     ->> attaquent
TEST: {{prendrons}}-elles un verre avec moi ?



!!!! Verbe auxiliaire                                                                             !!

__[i]/conf(conf_avoir_sujet_participe_passé)__
    ({avoir})-(?:je|tu|ils?|elles?|on) +({ppas})  @@0,$
    <<- morph(\1, ">avoir/", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.
__[i]/conf(conf_sujet_avoir_participe_passé)__
    (?:j’|je |tu |ils? |elles? |on ) *({avoir}) +({ppas})  @@*,$
    <<- morph(\1, ">avoir/", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.
................................................................................



@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: last_graph
@@@@
@@@@
@@@@
@@@@


!!
!!
!!!! Modes verbaux                                                                                !!
!!
!!

# conditionnel / futur

__vmode_j_aimerais_vinfi__
    [<start>|,]  [je|j’]  [aimerai|préférerai|préfèrerai|apprécierai|voudrai|souhaiterai|désirerai|adorerai]  @:[YX]|>(?:y|ne|que?)/¬:R
................................................................................
__vmode_qqch_que_subjonctif2__
    à       condition   [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
    pour    peu         [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
    il      peut        [que|qu’|qu]    @:(?:Os|M)      @:I¬:[GYS]
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                    # Ce verbe devrait être au subjonctif.

TEST: à condition qu’il {{finit}} son boulot.
TEST: pour peu qu’il {{prend}} son devoir sérieux…
TEST: il se peut que nous {{avons}} tort.


# Bien que + subjonctif
__vmode_bien_que_subjonctif__
    [<start>|,]  bien  [que|qu’|qu]  @:(?:Os|M)  @:I¬:(?:[GSK]|If|V0a)|>(?:hériter|recevoir|donner|offrir)/
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \1)                                                # Après « bien que », le verbe s’emploie au subjonctif.
................................................................................
        <<- /vmode/ -3>> =suggVerbMode(\3, ":I", \2)                                                # Après « quand » ou « lorsque », le verbe ne s’emploie pas au subjonctif mais à l’indicatif.

TEST: quand elle {{rencontrât}} son créateur
TEST: lorsqu’il y {{eût}} du grabuge, nous montâmes tous sur le pont.


@@@@
@@@@END_GRAPH
@@@@



@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: test
@@@@
@@@@
@@@@
@@@@

__code_legacy__
    legacy code
................................................................................
        <<- ~2>> *

TEST: Ça me fait {{plaisirs}}.



@@@@
@@@@END_GRAPH
@@@@


!!
!!
!!
!!
................................................................................
!!
!!
!!
!!
!!
!!
!!
!! TESTS: Faux positifs potentiels                                                                !!
!!
!!
!!
!!
!!
!!
!!
................................................................................
!!
!!
!!
!!
!!
!!

!!! À trier                                                                                       !!
TEST: L’homme sur le bateau de Patrick {{viens}} de temps en temps {{mangé}} chez moi.
TEST: Ces marchands {{passe}} leur temps à se quereller.
TEST: Ils jugeront en toute impartialité de ce cas {{délirante}}.
TEST: Ils sont de manière si étonnante et si admirable {{arrivé}} à ce résultat…
TEST: Les tests grand public de Jean-Paul {{montre}} des résultats surprenants.
TEST: Ils ont à plusieurs reprises {{perdus}} leur sang-froid.
TEST: Ces attaques à main armée {{donne}} la chair de poule.
................................................................................
TODO: Des copains plus vieux que moi qui fumaient.
TODO: Des copains plus vieux que toi qui fumaient.
TODO: André Juin était un sculpteur français.
TODO: La bataille de Monte Cassino révèle le génie militaire du général Juin.
TODO: Les côtes sont dans leur ensemble extrêmement découpées.


!!! Indécidable                                                                                   !!
TEST: Du sable fin grippe les rouages (accord avec ce qui précède).
TEST: Du monde noir sortent les envahisseurs (accord avec ce qui suit).

!!! Autres tests                                                                                  !!
TEST: Ça a l’air de t’aller.
TEST: Et je m’en sors.
TEST: C’est à chacun d’entre nous de suivre le modèle d’Amos.
TEST: C’est toi qui voulais y aller.
TEST: je ne suis qu’une joueuse en robe de soirée.
TEST: Tu ne fais qu’aggraver les choses.
TEST: Que veut-il ? Vous parler du boulot.
................................................................................
TEST: Enfin, les thèmes de la nouvelle réforme ont été longuement débattus.
TEST: Le moral des ménages au plus haut depuis 2007
TEST: Ce qu’ils nous ont fait
TEST: Comment vous expliquez ça ?
TEST: Comment vous expliquer ça ?


!!! Tests historiques                                                                             !!

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

## Version 0.5.11
TEST: Un moteur à cylindrée fixe

................................................................................
TEST: Je soussigné Pierre Dupont déclare avoir pris connaissance des conditions de ce contrat.
TEST: J’ai mille cent timbres.
TEST: À qui mieux mieux, à qui mieux mieux
TEST: L’est est loin, la gare de l’est aussi.



!!! Tests repris de LanguageTool                                                                  !!
## NOTE : ces textes contiennent parfois des erreurs (corrigées quand repérées par le correcteur)

TEST: Au voisinage du zéro absolu de température.
TEST: La couronne périphérique alterne falaises abruptes et plages.
TEST: Henri VIII rencontre François Iᵉʳ.
TEST: à ce jour.
TEST: avoir un bel avenir
................................................................................
TEST: Le 29 février 2008.
TEST: Le 29 février 2012.
TEST: Le 29 février 2016.
TEST: Le 29 février 2020.
TEST: Le 29-février-2004


!!! Le Horla, de Guy de Maupassant                                                                !!
# Nouvelle intégrale (228 lignes)
# Certains points diffèrent du texte original tiré de Wikisource :
# — les paragraphes sont souvent scindés pour des raisons pratiques.
# — les virgules avant les points de suspension ont été supprimées
# — moyen âge -> Moyen Âge
TEST: Le Horla — Guy de Maupassant
TODO: 8 mai. — Quelle journée admirable ! J’ai passé toute la matinée {{étendu}} sur l’herbe, devant ma maison, sous l’énorme platane qui la couvre, l’abrite et l’ombrage tout entière.
................................................................................
TEST: Pourquoi ce corps transparent, ce corps inconnaissable, ce corps d’Esprit, s’il devait craindre, lui aussi, les maux, les blessures, les infirmités, la destruction prématurée ?
TEST: La destruction prématurée ? toute l’épouvante humaine vient d’elle !
TEST: Après l’homme le Horla. — Après celui qui peut mourir tous les jours, à toutes les heures, à toutes les minutes, par tous les accidents, est venu celui qui ne doit mourir qu’à son jour, à son heure, à sa minute, parce qu’il a touché la limite de son existence !
TEST: Non… non… sans aucun doute, sans aucun doute… il n’est pas mort… Alors… alors… il va donc falloir que je me tue, moi !…
# FIN DU HORLA


!!! Double assassinat dans la rue morgue, d’Edgar Poe                                             !!
# Texte tiré de Wikisource
# Les paragraphes ont été découpés pour réduire la longueur des tests.
TEST: DOUBLE ASSASSINAT DANS LA RUE MORGUE — Edgar Poe
TEST: Quelle chanson chantaient les sirènes ? quel nom Achille avait-il pris, quand il se cachait parmi les femmes ? – Questions embarrassantes, il est vrai, mais qui ne sont pas situées au-delà de toute conjecture.
TEST: Sir Thomas Browne.
TODO: Les facultés de l’esprit qu’on définit par le terme {{analytiques}} sont en elles-mêmes fort peu susceptibles d’analyse.
TEST: Nous ne les apprécions que par leurs résultats. Ce que nous en savons, entre autres choses, c’est qu’elles sont pour celui qui les possède à un degré extraordinaire une source de jouissances des plus vives.
................................................................................
TEST: Néanmoins, qu’il n’ait pas pu débrouiller ce mystère, il n’y a nullement lieu de s’en étonner, et cela est moins singulier qu’il ne le croit ; car, en vérité, notre ami le préfet est un peu trop fin pour être profond. Sa science n’a pas de base.
TEST: Elle est tout en tête et n’a pas de corps, comme les portraits de la déesse Laverna, – ou, si vous aimez mieux, tout en tête et en épaules, comme une morue.
TEST: Mais, après tout, c’est un brave homme. Je l’adore particulièrement pour un merveilleux genre de cant auquel il doit sa réputation de génie.
TEST: Je veux parler de sa manie de nier ce qui est, et d’expliquer ce qui n’est pas[2].
# FIN DU DOUBLE ASSASSINAT DANS LA RUE MORGUE


!!! Vers Dorés, de Pythagore                                                                      !!
# Origine?
TEST: Aux dieux, suivant les lois, rends de justes hommages ;
TEST: Respecte le serment, les héros et les sages ;
TEST: Honore tes parents, tes rois, tes bienfaiteurs ;
TEST: Choisi parmi tes amis les hommes les meilleurs.
TEST: Sois obligeant et doux, sois facile en affaires.
TEST: Ne hais pas ton ami pour des fautes légères ;
................................................................................
TEST: XXX. Mais abstiens-toi des aliments que je t’ai défendus. Apprends à discerner ce qui est nécessaire dans la purification et la délivrance de l’âme. Examine tout ; donne à ta raison la première place et, content de te laisser conduire, abandonne-lui les rênes.
TEST: XXXI. Ainsi, quand tu auras quitté les dépouilles mortelles, tu monteras dans l’air libre ; tu deviendras un dieu immortel et la mort n’aura plus d’empire sur toi.
TEST: Fin des vers dorés de Pythagore
TEST: Note : Chez les Pythagoriciens, la monade ou l’unité représente Dieu-même, parce qu’elle n’est engendrée par aucun nombre, qu’elle les engendre tous, qu’elle est simple et sans aucune composition. La dyade, ou le nombre deux, est l’image de la nature créée, parce qu’elle est le premier produit de l’unité, parce qu’elle est inspirée, parce qu’ayant des parties elle peut se décomposer et se défendre. La monade et la dyade réunies forment le ternaire, et représentent l’immensité de tout ce qui existe, l’être immuable et la matière altérable et changeante. J’ignore par quelle propriété le quaternaire, le nombre quatre, est encore un emblème de la divinité.
# FIN DES VERS DORÉS DE PYTHAGORE


!!! Épître du feu philosophique, de Jean Pontanus                                                 !!
# Les paragraphes ont été découpés et ne correspondent pas à ceux du texte.
TEST: Épître du Feu Philosophique
TEST: Lettre concernant la pierre dite philosophale
TEST: Jean Pontanus
TEST: in Theatrum Chimicum, 1614, t. III
TEST: « Nous affirmons, au contraire, — et l’on peut avoir foi en notre sincérité, — qu’il sera impossible d’obtenir le moindre succès dans l’Œuvre si l’on a pas une connaissance parfaite de ce qu’est le Vase des Philosophes ni de quelle manière il faut le fabriquer. Pontanus avoue qu’avant de connaître ce vaisseau secret il avait recommencé, sans succès, plus de deux cents fois le même travail, quoiqu’il besognât sur les matières propres et convenables, et selon la méthode régulière. L’artiste doit faire lui-même son vaisseau ; c’est une maxime de l’art. N’entreprenez rien, en conséquence, tant que vous n’aurez pas reçu toute la lumière sur cette coquille de l’œuf qualifiée secretum secretorum chez les maîtres du Moyen Âge. »
TEST: — Fulcanelli, Le Mystère des Cathédrales, p. 204-205
................................................................................
TEST: Et moyennant notre feu, la médecine se multipliera si elle est conjointe à la matière crue, non seulement en quantité mais aussi en vertu.
TEST: Recherche donc de toutes les forces de ton esprit ce feu, et tu parviendras au but que tu t’es proposé ; car c’est lui qui fait tout l’œuvre, et il est la clef de tous les Philosophes, laquelle ils n’ont jamais révélée dans leurs livres.
TEST: Si tu penses bien profondément aux propriétés du feu ci-dessus, tu la connaîtras, mais non autrement.
TEST: Donc, touché d’un mouvement de pitié, j’ai écrit ceci ; mais, et afin que je me satisfasse, le feu n’est point transmué avec la matière, comme je l’ai dit ci-dessus.
TEST: J’ai bien voulu le dire et en avertir les prudents de ces choses, pour qu’ils ne dépensent pas inutilement leur argent, mais qu’ils sachent auparavant ce qu’ils doivent chercher, et, par ce moyen, parviendront à la vérité de l’Art ; non pas autrement. À Dieu.
# FIN DE L’ÉPÎTRE DU FEU PHILOSOPHIQUE

!!! Le Misanthrope, de Molière                                                                    !!
TEST: LE MISANTHROPE (1666)
TEST: de Molière
TEST: Texte établi par Charles Louandre, Charpentier, 1910 (2, pp. 170-239).
TEST: PERSONNAGES
TEST: Alceste, amant de Célimène,
TEST: Philinte, ami d’Alceste,
TEST: Oronte, amant de Célimène,