Grammalecte  Check-in [b695f86d1e]

Overview
Comment:[build][core][fr][doc] rename functions
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | core | build | doc
Files: files | file ages | folders
SHA3-256: b695f86d1e23bb7a547d73cb4c4e71c63e26b985fb7120e0dc1097136f73bdaf
User & Date: olr on 2020-11-25 22:59:29
Other Links: manifest | tags
Context
2020-11-26
07:12
[build][core][fr][doc] rename functions check-in: b316995bfc user: olr tags: build, core, doc, fr, trunk
2020-11-25
22:59
[build][core][fr][doc] rename functions check-in: b695f86d1e user: olr tags: build, core, doc, fr, trunk
22:37
[core][fr] rename functions check-in: 55b6bb4791 user: olr tags: build, core, fr, trunk
Changes

Modified compile_rules_graph.py from [b9a13543b1] to [256d05840f].

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
    sCode = sCode.replace("sContext", "_sAppContext")
    sCode = re.sub(r"\b(morph|morphVC|analyse|value|tag|meta|info)[(]\\(\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(morph|morphVC|analyse|value|tag|meta|info)[(]\\-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"\b(select|exclude|define|definefrom|rewrite|addmorph|setmeta)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(select|exclude|define|definefrom|rewrite|addmorph|setmeta)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2], dTags', sCode)
    sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1], dTags', sCode)
    sCode = re.sub(r"\bspace_after[(][\\](\d+)", 'g_space_between_tokens(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\bspace_after[(][\\]-(\d+)", 'g_space_between_tokens(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\banalyse_with_next[(][\\](\d+)", 'g_merged_analyse(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\banalyse_with_next[(][\\]-(\d+)", 'g_merged_analyse(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(>1", 'g_\\1(lToken[nLastToken+1]', sCode)                       # next token
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(<1", 'g_\\1(lToken[nTokenOffset]', sCode)                       # previous token
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(>(\d+)", 'g_\\1(g_token(lToken, nLastToken+\\2)', sCode)        # next token
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(<(\d+)", 'g_\\1(g_token(lToken, nTokenOffset+1-\\2)', sCode)    # previous token
    sCode = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', sCode)







|
|







40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
    sCode = sCode.replace("sContext", "_sAppContext")
    sCode = re.sub(r"\b(morph|morphVC|analyse|value|tag|meta|info)[(]\\(\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(morph|morphVC|analyse|value|tag|meta|info)[(]\\-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"\b(select|exclude|define|definefrom|rewrite|addmorph|setmeta)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(select|exclude|define|definefrom|rewrite|addmorph|setmeta)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2], dTags', sCode)
    sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1], dTags', sCode)
    sCode = re.sub(r"\bspace[(][\\](\d+)", 'g_space(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\bspace[(][\\]-(\d+)", 'g_space(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\banalyse_with_next[(][\\](\d+)", 'g_merged_analyse(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\banalyse_with_next[(][\\]-(\d+)", 'g_merged_analyse(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(>1", 'g_\\1(lToken[nLastToken+1]', sCode)                       # next token
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(<1", 'g_\\1(lToken[nTokenOffset]', sCode)                       # previous token
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(>(\d+)", 'g_\\1(g_token(lToken, nLastToken+\\2)', sCode)        # next token
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(<(\d+)", 'g_\\1(g_token(lToken, nTokenOffset+1-\\2)', sCode)    # previous token
    sCode = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', sCode)

Modified doc/syntax.txt from [ae64accd19] to [27f6e428ae].

343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
...
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644

`morph(n, "regex"[, "neg_regex"][, trim_left=0][, trim_right=0])`
`analyse(n, "regex"[, "neg_regex"][, trim_left=0][, trim_right=0])`

>   Same action with `morph()` and `morph0()` for regex rules.
>   Parameters <trim_left> and <trim_right> removed n characters at left or the right of the token before performing an analyse.

`space_after(n, min_space[, max_space])`

>   Returns True if the next token after token n is separated with at least <min_space> blank spaces and at most with <max_space> blank spaces.

`tag(n, tag)`

>   Returns True if <tag> exists on taken the nth token.

`tag_before(n, tag)`

>   Returns True if <tag> is found any token before the nth tag.

`tag_after(n, tag)`

>   Returns True if <tag> is found any token after the nth tag.

### Functions for regex and token rules

`__also__`

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

>   At reference n, select morphologies that match the pattern.

`exclude(n, pattern)`

>   At reference n, exclude morphologies that match the pattern.

`define(n, [morph_list])`

>   At reference n, set the listed morphologies (a list of strings).

`add_morph(n, [morph_list])`

>   At reference n, add the listed morphologies (a list of strings).

Examples:

    =>> select(\1, "po:noun is:pl")
    =>> exclude(\1, "po:verb")
    =>> exclude(\1, "po:verb") and define(\2, ["po:adv"]) and select(\3, "po:adv")

Note: All these functions ALWAYS return True.

If `select()` and `exclude()` generate an empty list, nothing change.

With `define()` and `addmorph()`, you must set a list of POS tags. Example:

    =>> define(\1, ["po:nom is:plur", "po:adj is:sing", "po:adv"])
    =>> addmorph(\1, ["po:adv"])

### Tagging

**Only for token rules**. Tagging can be done with the command `/>>`. You can set one or several tags at once. Use `|` as a separator.

Example: `/>> a_tag` to set the same tag on all takens of the rule.
Example: `/3>> a_tag` to set the tag on the third token.
Example: `/>> a_tag|another_tag` to set two tags.

You can know if a token is tagged with eh function `tag()` and you can know if tags have been set on previous or following tokens with `tag_before()` and `tag_after()`.

### Immunity

**Only for token rules**. A immunity rule set a flag on token(s) who are not supposed to be considered as an error. If any other rules find an error, it will be ignored. If an error has already been found, it will be removed.

Example: `!2>>` means no error can be set on the second token.
Example: `!>>` means all tokens will be considered as correct.







|







|



|







 







|

|

|

|





|







|
|









|







343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
...
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644

`morph(n, "regex"[, "neg_regex"][, trim_left=0][, trim_right=0])`
`analyse(n, "regex"[, "neg_regex"][, trim_left=0][, trim_right=0])`

>   Same action with `morph()` and `morph0()` for regex rules.
>   Parameters <trim_left> and <trim_right> removed n characters at left or the right of the token before performing an analyse.

`space(n, min_space[, max_space])`

>   Returns True if the next token after token n is separated with at least <min_space> blank spaces and at most with <max_space> blank spaces.

`tag(n, tag)`

>   Returns True if <tag> exists on taken the nth token.

`tagbefore(n, tag)`

>   Returns True if <tag> is found any token before the nth tag.

`tagafter(n, tag)`

>   Returns True if <tag> is found any token after the nth tag.

### Functions for regex and token rules

`__also__`

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

>   At reference n, select morphologies that match the pattern.

`exclude(n, pattern)`

>   At reference n, exclude morphologies that match the pattern.

`define(n, morph_list as string)`

>   At reference n, set the listed morphologies.

`addmorph(n, morph_list as string)`

>   At reference n, add the listed morphologies.

Examples:

    =>> select(\1, "po:noun is:pl")
    =>> exclude(\1, "po:verb")
    =>> exclude(\1, "po:verb") and define(\2, "po:adv") and select(\3, "po:adv")

Note: All these functions ALWAYS return True.

If `select()` and `exclude()` generate an empty list, nothing change.

With `define()` and `addmorph()`, you must set a list of POS tags. Example:

    =>> define(\1, "po:nom is:plur|po:adj is:sing|po:adv")
    =>> addmorph(\1, "po:adv")

### Tagging

**Only for token rules**. Tagging can be done with the command `/>>`. You can set one or several tags at once. Use `|` as a separator.

Example: `/>> a_tag` to set the same tag on all takens of the rule.
Example: `/3>> a_tag` to set the tag on the third token.
Example: `/>> a_tag|another_tag` to set two tags.

You can know if a token is tagged with eh function `tag()` and you can know if tags have been set on previous or following tokens with `tagbefore()` and `tagafter()`.

### Immunity

**Only for token rules**. A immunity rule set a flag on token(s) who are not supposed to be considered as an error. If any other rules find an error, it will be ignored. If an error has already been found, it will be removed.

Example: `!2>>` means no error can be set on the second token.
Example: `!>>` means all tokens will be considered as correct.

Modified gc_core/js/lang_core/gc_functions.js from [aa38f73dea] to [b16f321cd1].

323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
    return oToken.hasOwnProperty("aTags") && oToken["aTags"].has(sTag);
}

function g_meta (oToken, sType) {
    return oToken["sType"] == sType;
}

function g_space_between_tokens (oToken1, oToken2, nMin, nMax=null) {
    let nSpace = oToken2["nStart"] - oToken1["nEnd"]
    if (nSpace < nMin) {
        return false;
    }
    if (nMax !== null && nSpace > nMax) {
        return false;
    }







|







323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
    return oToken.hasOwnProperty("aTags") && oToken["aTags"].has(sTag);
}

function g_meta (oToken, sType) {
    return oToken["sType"] == sType;
}

function g_space (oToken1, oToken2, nMin, nMax=null) {
    let nSpace = oToken2["nStart"] - oToken1["nEnd"]
    if (nSpace < nMin) {
        return false;
    }
    if (nMax !== null && nSpace > nMax) {
        return false;
    }

Modified gc_core/py/lang_core/gc_functions.py from [35f4fd30c3] to [31d3381f72].

272
273
274
275
276
277
278
279
280
281
282
283
284
285
286


def g_meta (dToken, sType):
    "returns True if <sType> is equal to the token type"
    return dToken["sType"] == sType


def g_space_between_tokens (dToken1, dToken2, nMin, nMax=None):
    "checks if spaces between tokens is >= <nMin> and <= <nMax>"
    nSpace = dToken2["nStart"] - dToken1["nEnd"]
    if nSpace < nMin:
        return False
    if nMax is not None and nSpace > nMax:
        return False
    return True







|







272
273
274
275
276
277
278
279
280
281
282
283
284
285
286


def g_meta (dToken, sType):
    "returns True if <sType> is equal to the token type"
    return dToken["sType"] == sType


def g_space (dToken1, dToken2, nMin, nMax=None):
    "checks if spaces between tokens is >= <nMin> and <= <nMax>"
    nSpace = dToken2["nStart"] - dToken1["nEnd"]
    if nSpace < nMin:
        return False
    if nMax is not None and nSpace > nMax:
        return False
    return True

Modified gc_lang/fr/rules.grx from [16cbef8ec3] to [374df9580b].

1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
....
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
....
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
....
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
....
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
....
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
....
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
....
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
....
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
....
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
....
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
....
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
....
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
....
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
....
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
....
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
....
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
.....
11182
11183
11184
11185
11186
11187
11188
11189
11190
11191
11192
11193
11194
11195
11196
.....
17895
17896
17897
17898
17899
17900
17901
17902
17903
17904
17905
17906
17907
17908
17909
.....
20989
20990
20991
20992
20993
20994
20995
20996
20997
20998
20999
21000
21001
21002
21003
.....
21353
21354
21355
21356
21357
21358
21359
21360
21361
21362
21363
21364
21365
21366
21367
.....
21444
21445
21446
21447
21448
21449
21450
21451
21452
21453
21454
21455
21456
21457
21458
21459
21460
21461
.....
21550
21551
21552
21553
21554
21555
21556
21557
21558
21559
21560
21561
21562
21563
21564
.....
23396
23397
23398
23399
23400
23401
23402
23403
23404
23405
23406
23407
23408
23409
23410
23411
23412
23413
23414
.....
24800
24801
24802
24803
24804
24805
24806
24807
24808
24809
24810
24811
24812
24813
24814
.....
25288
25289
25290
25291
25292
25293
25294
25295
25296
25297
25298
25299
25300
25301
25302
.....
25764
25765
25766
25767
25768
25769
25770
25771
25772
25773
25774
25775
25776
25777
25778
25779
25780
25781
25782
25783
25784
25785
25786
25787
25788
25789
25790
25791
25792
25793
25794
25795
25796
25797
25798
25799
25800
25801
25802
25803
25804
25805
25806
25807
.....
29010
29011
29012
29013
29014
29015
29016
29017
29018
29019
29020
29021
29022
29023
29024
29025
29026
29027
29028
29029
29030
29031
29032
29033
29034
29035
29036
29037
29038
29039
29040
.....
29207
29208
29209
29210
29211
29212
29213
29214
29215
29216
29217
29218
29219
29220
29221
29222
29223
29224
29225
29226
29227
29228
29229
29230
29231
29232
29233
29234
29235
29236
29237
29238
29239
29240
29241
29242
29243
29244
29245
29246
29247
29248
29249
29250
29251
29252
29253
29254
29255
29256
29257
29258
29259
29260
29261
29262
29263
29264
29265
29266
29267
29268
29269
29270
29271
29272
29273
29274
29275
29276
29277
29278
29279
29280
29281
29282
.....
29283
29284
29285
29286
29287
29288
29289
29290
29291
29292
29293
29294
29295
29296
29297
29298
29299
29300
29301
29302
29303
.....
29319
29320
29321
29322
29323
29324
29325
29326
29327
29328
29329
29330
29331
29332
29333
29334
29335
29336
29337
29338
.....
29344
29345
29346
29347
29348
29349
29350
29351
29352
29353
29354
29355
29356
29357
29358
.....
29383
29384
29385
29386
29387
29388
29389
29390
29391
29392
29393
29394
29395
29396
29397
29398
29399
29400
29401
29402
29403
29404
29405
29406
29407
29408
29409
29410
29411
29412
29413
29414
29415
29416
29417
29418
29419
29420
29421
29422
29423
29424
29425
29426
29427
29428
29429
29430
29431
29432
29433
29434
29435
29436
29437
29438
29439
29440
29441
29442
29443
29444
29445
29446
29447
29448
29449
29450
29451
29452
29453
29454
.....
30346
30347
30348
30349
30350
30351
30352
30353
30354
30355
30356
30357
30358
30359
30360
30361
30362
30363
30364
30365
30366
30367
30368
30369
30370
30371
30372
30373
30374
30375
30376
30377
30378
30379
30380
30381
30382
30383
30384
30385
30386
30387
30388
30389
30390
30391
30392
30393
30394
30395
30396
30397
30398
30399
30400
30401
30402
30403
30404
30405
30406
30407
30408
30409
30410
30411
30412
30413
30414
30415
30416
30417
30418
30419
30420
30421
30422
30423
30424
30425
30426
30427
30428
30429
30430
30431
30432
30433
30434
30435
30436
30437
30438
30439
30440
30441
30442
30443
30444
30445
30446
30447
30448
30449
30450
30451
30452
30453
30454
30455
.....
30456
30457
30458
30459
30460
30461
30462
30463
30464
30465
30466
30467
30468
30469
30470
30471
30472
30473
30474
30475
30476
30477
30478
30479
30480
30481
30482
30483
30484
30485
30486
30487
.....
30492
30493
30494
30495
30496
30497
30498
30499
30500
30501
30502
30503
30504
30505
30506
30507
30508
30509
30510
30511
30512
30513
30514
30515
30516
30517
30518
30519
30520
30521
30522
30523
.....
30525
30526
30527
30528
30529
30530
30531
30532
30533
30534
30535
30536
30537
30538
30539
30540
30541
30542
30543
30544
30545
30546
30547
30548
30549
30550
30551
30552
30553
30554
30555
30556
30557
30558
30559
30560
30561
30562
30563
30564
30565
30566
30567
30568
.....
31138
31139
31140
31141
31142
31143
31144
31145
31146
31147
31148
31149
31150
31151
31152
.....
32042
32043
32044
32045
32046
32047
32048
32049
32050
32051
32052
32053
32054
32055
32056
32057
32058
32059
32060
32061
32062
32063
32064
32065
32066
32067
32068
32069
32070
32071
32072
32073
32074
32075
32076
32077
32078
32079
32080
32081
32082
32083
32084
32085
32086
32087
32088
32089
32090
32091
32092
32093
32094
32095
32096
32097
32098
32099
32100
!!!
!!! Purge de la phrase                                                                            !!
!!!
!!!

__tag_mots_entre_guillemets__
    «  [*WORD|*WORDELD]  »
        <<- space_after(\1, 0, 1) and space_after(\2, 0, 1) /2>> eg1mot

    «  [*WORD|*WORDELD]  [*WORD|*WORDELD]
        <<- space_after(\1, 0, 1) /2:0>> egxmot

    [*WORD|*WORDELD]  [*WORD|*WORDELD]  »
        <<- space_after(\2, 0, 1) /1:2>> egxmot

    [“|”|"]     [*WORD|*WORDELD]   [“|”|"]
    [‘|'|’|`]   [*WORD|*WORDELD]   [‘|'|’|`]
        <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) /2>> eg1mot

    ["|“|”]  [*WORD|*WORDELD]  *[*WORD|*WORDELD]
        <<- space_after(\1, 0, 0) /2:0>> egxmot

    [*WORD|*WORDELD]  [*WORD|*WORDELD]  ["|“|”]
        <<- space_after(\2, 0, 0) /1:2>> egxmot


__purge_guillemets__
    [«|»|“|”|"|„|`]
        <<- ~>> *


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

    ( … )
        <<- ->> […]                 && Pour indiquer une troncature de texte, on utilise usuellement des crochets.
        <<- ~>> *

    (  [re|ré]  )  *WORD
    [  [re|ré]  ]  *WORD
        <<- space_after(\3, 0, 0) ~1:3>>  *

    [  *NUM  ]
    [  …  ]
        <<- ~>> *

    **  [  *WORD  ]  **
        <<- space_after(\1, 1, 3) and space_after(\-2, 1, 3) >>>
        <<- morph(\3, ":G") ~2:4>> |\2|
        <<- __else__ ~2:4>> *

    ## chapitres, références
    (  [*WORD|*NUM]  ,  *NUM  )
    [  [*WORD|*NUM]  ,  *NUM  ]
    {  [*WORD|*NUM]  ,  *NUM  }
................................................................................
        <<- /virg/ ->> …                    && Typographie : pas de virgule avant les points de suspension.

TEST: ceci, cela{{, …}}                                                     ->> …


__virg_virgule_après_point__
    *WORD  .  ,
        <<- /virg/ space_after(\1, 0, 0) and space_after(\2, 0, 0)
            and not value(\1, "|etc|fig|hab|litt|fig|hab|litt|circ|coll|ref|réf|étym|suppl|bibl|bibliogr|cit|vol|déc|nov|oct|janv|juil|avr|sept|pp|")
            and \1.__len__() > 1
        -2:3>> ,|.                                                          && Pas de virgule après un point (sauf éventuellement après une abréviation).

TEST: Les chiens, les chats{{.,}} les poules.                               ->> ,|.
TEST: A., dans le meilleur des cas, s’abstenait de tout commentaire

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

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

    [  [m|t|s]  ]  [a|on|es]
    [  [n|v]    ]  [otre|ôtre]
        <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) and space_after(\3, 0, 0) ~>> ␣\2\4
        <<- =>> setmeta(\1, "WORD")

TEST: [s]es {{homme}}                                           ->> hommes
TEST: des effets sur [s]es états d’âme, [s]on corps


__fusions_noms_communs__
................................................................................

    nec plus ultra
    terra incognita
    statu quo
        <<- ~>> ␣

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

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

    cul et chemise
    mari et femme
    père et mère
    papa et maman
    frère et sœur
    cousin et cousine
................................................................................
TEST: elles sont cul et chemise
TEST: ils sont frère et sœur
TEST: iels étaient mari et femme


__fusions_noms_communs_séparés_slash__
    *WORD  /  *WORD
        <<- space_after(\1, 0, 1) and space_after(\2, 0, 1) and morph(\1, ":N") and morph(\-1, ":N") and not (morph(\1, "[123][sp]") and morph(<1, ":O[vs]")) ~>> ␣
        <<- __also__ =>> define(\1, ":N:e:i")

TEST: Elle peut se cacher / rendre visible par le petit “+” au-dessus.


__fusions_noms_propres__
    d’ Alembert
................................................................................
TEST: __ocr__ X
TEST: __ocr__ V.


# virgules
__ocr_virgules__
    [il|le|la|l’|les|de|d’|ne|n’|me|m’|te|t’|se|s’|à|ce|cet|cette|mon|ma|ta|sa|mes|tes|ses|nos|vos|quelque|quelques|au|aux] ,
        <<- /ocr/ space_after(\1, 0, 0) and not \1.isupper() or value(\1, "|à|") ->> \1             && Erreur de numérisation ? Virgule superflue ?

TEST: __ocr__ Pierre entre pour {{se,}} rapprocher de L
TEST: __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ?


# A
__ocr_A__
................................................................................
TEST: __ocr__ {{lu}} as si bien réussi
TEST: __ocr__ contre {{los}} impies


# M. / Mr / M
__ocr_mr__
    M ,  /_Tit_
        <<- /ocr/ space_after(\1, 0, 1) -1:2>> "Mr |M. "                                                                  && Erreur de numérisation ?

    M  /_Tit_
        <<- /ocr/ -1>> "Mr |M. "                                                                    && Erreur de numérisation ?

TEST: __ocr__ {{M,}} Patrick nous a oubliés.
TEST: __ocr__ Rencontre avec {{M}} Black.

................................................................................
!!!! Élisions & euphonie                                                                          !!
!!
!!

# élisions
__eleu_élisions_manquantes__
    [le|la|de]  ~^[aâeéèêiîoôuûyœæh].
        <<- /eleu/ space_after(\1, 1, 1) and not re.search("(?i)^(?:I(?:I|V|X|er|ᵉʳ|ʳᵉ|è?re))", \2) and morph(\2, ":", ":G|;é")
        -1:.2>> =\1[0:1]+"’"                                                && Élision de l’article devant un mot commençant par une voyelle.|http://fr.wikipedia.org/wiki/Élision

    si [il|ils]
        <<- /eleu/ space_after(\1, 1, 1) -1:.2>> s’                         && Il faut élider “si” et l’accoler au pronom.|http://fr.wikipedia.org/wiki/Élision

    que [il|ils|elle|elles|on|iel|iels]
        <<- /eleu/ space_after(\1, 1, 1) -1:.2>> qu’                        && Il faut élider “que” et l’accoler au pronom.|http://fr.wikipedia.org/wiki/Élision

    [je|ne|me|te|se]  ~^[aâeéèêiîoôuûyœæh].
        <<- /eleu/ not \1.isupper() and space_after(\1, 1, 1) and morph(\2, ":V", ":Q|;é")
        -1:.2>> =\1[0:1]+"’"                                                && Il faut élider le pronom “\1” et l’accoler au verbe.|http://fr.wikipedia.org/wiki/Élision

TEST: {{le }}amour                                                          ->> l’
TEST: {{la }}imagination                                                    ->> l’
TEST: {{de }}amour                                                          ->> d’
TEST: {{de }}est en ouest                                                   ->> d’
TEST: je crois que {{si }}ils viennent, ils seront mécontents               ->> s’
................................................................................
    *NUM  -  ~^\d\d?$  -  ~^\d{2,5}$
        <<- \1.isdigit() ~>> ␣
        <<- =>> setmeta(\1, "DATE")


__date_jour_mois_année__
    31 [avril|juin|septembre|novembre]
        <<- /date/ space_after(\1, 1, 1) ->> 30 \2                                                  && Cette date est invalide. Il n’y a que 30 jours en \2.

    [30|31] février
        <<- /date/ space_after(\1, 1, 1) ->> 28 février|29 février                                  && Cette date est invalide. Il n’y a que 28 ou 29 jours en février.

    ~^\d\d?$  [janvier|février|mars|avril|mai|juin|juillet|aout|août|septembre|octobre|novembre|décembre]  ~^\d{2,5}$
        <<- /date/ not checkDate(\1, \2, \3) ->> _                                                  && Cette date est invalide.

TEST: le {{31 avril}}
TEST: le {{30 février}}
TEST: {{29 février 2011}}
................................................................................

__tu_préfixe_xxxo__
    [macro|magnéto|micro|paléo|rétro|rhino|stéréo]  *WORD
        <<- /tu/ analyse_with_next(\1, "-", ":")
        ->> \1-\2                                                                                   && S’il s’agit d’un seul mot, il manque un trait d’union.

    [électro|ferro|hydro|labio|médico|nano|néo|neuro|physico|politico|sino|socio]  *WORD
        <<- /tu/ space_after(\1, 1, 1) and (morph(\2, ":N") or analyse_with_next(\1, "-", ":"))
        ->> \1-\2                                                                                   && S’il s’agit d’un seul mot, il manque un trait d’union.

TEST: {{ferro électrique}}                              ->> ferro-électrique
TEST: {{rétro ingénierie}}.                             ->> rétro-ingénierie


__tu_préfixe_divers__
................................................................................
TEST: Les {{va-t-en guerre}} sont de sortie.
TEST: Elle va t’en donner, des devoirs.


# est-ce … ?
__tu_est_ce__
    est ce  @:¬:N.*:[me]:[si]|>qui/
        <<- /tu/ morph(<1, ":Cs|<start>") and space_after(\1, 1, 1) -1:2>> est-ce                   && S’il s’agit d’une interrogation, il manque un trait d’union.

TEST: {{est ce}} que c’est grave ?                                              ->> est-ce
TEST: qu’{{est ce}} que c’est ?                                                 ->> est-ce
TEST: elles reviendront, {{n’est ce pas}} ?
TEST: nous en sommes à l’étape où nous voulons définir ce qu’est ce projet
TEST: c’est ce que nous pensions.

................................................................................
!!!! Trait d’union : formes interrogative (nous/vous)                                             !!

__inte_union_nous1!7__
    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~ons$  nous
    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~ons$  nous
    [ne|n’]  [le|la|l’|les]                  [lui|leur|en|y]             ~ons$  nous
    [ne|n’]  [lui|leur|y]                    en                          ~ons$  nous
        <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:1p", ":[GW]") and not tagbefore(\1, "_1p_")
        --2:-1>> \-2-\-1                                                                            && Forme interrogative ? Mettez un trait d’union.

    ,  ~ons$  nous  [<end>|,|)]
    ,  ~ons$  nous  @:¬:(?:1p|Y)
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    <start>  ~ons  nous
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|allons|venons|partons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons  nous
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: n’y {{retrouverons nous}} jamais la tranquilité ?
TEST: pourquoi n’en {{entendons nous}} jamais parler ?
TEST: que {{pouvons nous}} dans cette vie
TEST: que {{pouvons nous}} faire ?
TEST: {{Connaissons nous}} réellement cette langue ?
................................................................................


__inte_union_vous1!7__
    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~ez$  vous
    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~ez$  vous
    [ne|n’]  [le|la|l’|les]                  [lui|leur|en|y]             ~ez$  vous
    [ne|n’]  [lui|leur|y]                    en                          ~ez$  vous
        <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:2p", ":[GW]") and not tagbefore(\1, "_2p_")
        --2:-1>> \-2-\-1       && Forme interrogative ? Mettez un trait d’union.

    ,  ~ez$  vous  [<end>|,|)]
    ,  ~ez$  vous  @:¬:(?:2p|Y)
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    <start>  ~ez$  vous
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|allez|venez|partez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ez$  vous
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: ne {{soutiendrez vous}} pas cette proposition ?
TEST: n’en {{voulez vous}} jamais à ces gens ?
TEST: je suis, {{penserez vous}}, un imbécile.
TEST: {{pouvez vous}} réussir ?
TEST: comment {{pensez vous}} y parvenir
................................................................................
TEST: Tape-toi Patrick.


!!!! Apostrophe manquante (2)                                                                     !!

__typo_apostrophe_manquante_audace__
    <start>  [L|D|S|N|C|J|M|T|Ç]  ~^[aeéiouhAEÉIOUHyîèêôûYÎÈÊÔÛ]
        <<- /mapos/ space_after(\2, 1, 1) -2:.3>> =\2+"’"                                           && 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                                        !!

................................................................................
    [de|d’]  [l’|leur]  @:[123][sp]¬:[GNAQ]
        <<- /conf/ not \3.istitle() -3>> =suggSimil(\3, ":[NA]:.:[si]", True)                       && Incohérence avec « \1 \2 » : “\3” est une forme verbale conjuguée.

TEST: de l’{{arrivait}}


    [de|d’]  le  *WORD
        <<- /conf/ space_after(\1, 0, 1) and morph(\3, ":[NAQ].*:[me]", ":[YG]") and not \3.istitle()
            and not (value(\3, "|mal|") and morph(>1, ":Y")) -1:2>> du                              && Incohérence avec « \1 \2 » : “\3” est un nom ou un adjectif.
        <<- /conf/ morph(\3, ":[123][sp]") -3>> =suggVerbInfi(\3)                                   && Incohérence avec « \1 \2 » : “\3” est une forme verbale conjuguée.

TEST: {{de le}} vin                                           ->> du
TEST: il n’est pas interdit de le {{pensait}}
TEST: que connais-tu de “Le Tambour” ?

................................................................................
        <<- /conf/ not value(<1, "|oh|ah|") and not after("^ +et là")
        ->> ça                                          && Confusion : “çà” ne s’emploie plus guère que dans l’expression “çà et là”.|https://fr.wiktionary.org/wiki/%C3%A7%C3%A0

    sa  [<end>|,|)]
        <<- /conf/ \1 != "SA" -1>> ça                   && Confusion probable : “sa” est un déterminant féminin singulier. Pour l’équivalent de “cela” ou “ceci”, écrivez “ça”.

    [c’|ç’] [à|a]
        <<- /conf/ space_after(\1, 0, 0) and not (value(\2, "|a|") and value(>1, "|été|")) >>>
        <<- /conf/ value(>1, "|été|") -2>> a            && Confusion. Pour le verbe avoir à la 3ᵉ personne du singulier, écrivez “a”.
        <<- /conf/ __else__ ->> ça|sa                   && Confusion. Si vous voulez dire “cela”, écrivez “ça”. Pour le déterminant possessif, écrivez “sa”.

    ça et là
        <<- /conf/ not morph(<1, ":R") ->> çà et là     && Confusion : “ça” équivaut à “cela”. Dans l’expression “çà et là”, le terme “çà” signifie “ici”.

TEST: Je prends {{sa}}…
................................................................................
    [<start>|,|/_start_] ?l’¿ ont t’
        <<- /conf/ not value(>1, "|il|ils|elle|elles|iel|iels|") --2>> on    && Confusion probable : le mot “ont” est une conjugaison du verbe avoir.

    ~-ont$
        <<- /conf/ ->> =\1[:-1]                                     && Incohérence : le mot “ont” est une forme conjuguée du verbe “avoir” (par exemple : “ils ont”). Pour le pronom, écrivez “on”.

    [<start>|,|(]  *WORD  ont
        <<- /conf/ space_after(\2, 1, 1) and not value(\2, "|soit|") and morph(\2, ":3s") and not (tag(\-1, "eg1mot") and morph(\2, ">écrire/"))
        -2:3>> \2-on            && Confusion probable : le mot “ont” est une forme conjuguée du verbe “avoir”. Pour le pronom, écrivez “on” et mettez un trait d’union puisqu’il s’agit d’une question.

TEST: il m’assure qu’{{ont}} ne sait pas s’y prendre
TEST: {{ont}} m’assure qu’il n’y en a pas.
TEST: {{Ont}} n’arrive pas à s’en sortir.
TEST: {{Ont}} ne sait jamais quoi faire
TEST: si {{ont}} donne à ces gens, ça n’en finit plus.
................................................................................
        <<- ~2>> *

    Amérique du [Nord|Sud]
    Amérique centrale
        <<- ~2:0>> *

    @:M[12]  *WORD
        <<- \2.istitle() and space_after(\1, 1, 1) or re.search("^[MDCLXVI]+$", \2) ~2:0>> *

    @:M[12]  [Ier|Iᵉʳ]
        <<- \2.istitle() ~2:0>> *

    @:M[12]  [Le|La|von|van|Mac|Mc|De|Du|D’]  *WORD
        <<- \3.istitle() ~2:0>> *

................................................................................
    [>lieue|lieus] [>aménager|>abandonner|>insolite|>éloigner|>réserver|>sacrer|>connaître|>méconnaître|>privilégier|>priver]
        <<- /conf/ morph(\2, ":Q") -1>> lieu|lieux              && Confusion probable. Pour désigner un endroit, écrivez “lieu(x)”.|https://fr.wiktionary.org/wiki/lieu

    [>être|>demeurer|>déménager|>habiter|>trouver|>situer|>rester|>demeurer|>demeure|>vivre]  à  [quelques|plusieurs|maintes|*NUM|$:B:e:p]  [lieux|lieus]
        <<- /conf/ --1>> lieues                                 && Confusion probable. Pour désigner une distance, écrivez “lieues”.|https://fr.wiktionary.org/wiki/lieue

    [>être|>demeurer|>déménager|>habiter|>trouver|>situer|>rester|>demeurer|>demeure|>vivre]  à  des  [lieux|lieus]
        <<- /conf/ space_after(\2, 1, 4) --1>> lieues           && Confusion probable. Pour désigner une distance, écrivez “lieues”.|https://fr.wiktionary.org/wiki/lieue

    *NUM >lieu sous [la|les] >mer
    $:B:e:p  >lieu sous [la|les] >mer
        <<- /conf/ -2>> lieues                                  && Confusion. Pour désigner une distance, écrivez “lieue”.|https://fr.wiktionary.org/wiki/lieue

    [lieux|>lieue] [>jaune|>noir|>mordre]
        <<- /conf/ -1>> lieu|lieus                              && Confusion probable. Si vous parlez du poisson, écrivez “lieu” ou, au pluriel, “lieus”.|https://fr.wiktionary.org/wiki/lieu
................................................................................
TEST: Elle voulut expier ses {{pêchés}}.                                    ->> péchés
TEST: il {{péchait}} à la ligne                                             ->> pêchait


# peu / peux / peut
__conf_peut_peux_peu2__
    [peux|peut]  [de|d’]  @:[NA]¬*
        <<- /conf/ not value(<1, "|je|tu|il|elle|on|ne|n’|") and space_after(\1, 1, 3) -1>> peu     && Confusion probable : “\1” est une forme conjuguée de “pouvoir”, écrivez “peu” pour dire “pas beaucoup”.

TEST: {{peut}} d’hommes savent comment s’y prendre
TEST: peu d’argent
TEST: il peut de façon crédible avancer qu’il veut tout faire sauter


__conf_det_1subst_peu_peut_vinfi__
................................................................................

TEST: c’est tout le système qui {{peu}} vaciller            ->> peut


# peut-être / peut être
__conf_peut_être2__
    *WORD peut être
        <<- /conf/ space_after(\2, 1, 1) and morph(\1, ":V", ":[NAQGM]") -2:3>> peut-être           && Confusion probable. Pour dire “possiblement”, écrivez “peut-être”.

    <start> peut être
        <<- /conf/ space_after(\2, 1, 1) -2:3>> peut-être                                           && Confusion probable. Pour dire “possiblement”, écrivez “peut-être”.

TEST: {{Peut être}} qu’on en saura plus demain.
TEST: Ils vont {{peut être}} enfin faire quelque chose de leur misérable existence.
TEST: L’un peut être réglé immédiatement
TEST: Réussir peut parfois être la pire chose possible.
TEST: Peut vraiment être violent en cas d’humiliation.
TEST: « Oui, sans doute », mais peut-être pas pour tout le monde
................................................................................
TEST: tu n’as {{cas}} prendre le train


# quand même / comme même
__conf_quand_même__
    comme même [<end>|,|)]
    comme même @:(?:Os|C)
        <<- /conf/ space_after(\1, 1, 1) -1:2>> quand même      && Confusion probable.|https://fr.wiktionary.org/wiki/quand_m%C3%AAme

TEST: {{comme même}} il y va fort, le saligaud !
TEST: La météo disait qu’il ferait beau temps, mais il pleut {{comme même}}…


# quoi qu’il en soit
__conf_quoi_qu_il_en_soit__
................................................................................
TEST: il en faut trois minimum, cinq maximum
TEST: il vit dans un vingt-quatre mètre carré.
TEST: Cent quarante-neuvième épisode


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

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

    *NUM  *WORD  *WORD
        <<- /gn/ not value(\2, "|maximum|minimum|fois|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|")
            and not re.search("^0*[01](?:,[0-9]+|)$", \1) and not morph(<1, ">(?:et|ou)/|:(?:N|D.*:[si])") and not morph(\3, ">(?:seul|maximum|minimum)/|:(?:[BG]|V0)") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
................................................................................
!!

#### Infinitif après “à”

__infi_à_verbe__
    à  le            ~..(?:ée?s?|ez|ai[st]?)$
    à  les           ~..(?:ée?s?|ez|ai[st]?)$
        <<- /infi/ \-1.islower() and space_after(\1, 1, 1) and morph(\-1, ":V", ":[YM]" )
        --1>> =suggVerbInfi(\-1)                                                                    && Erreur probable. Après le pronom “à”, le verbe devrait être à l’infinitif.

    à  [la|l’|leur]  ~..(?:ée?s?|ez|ai[st]?)$
        <<- /infi/ \-1.islower() and morph(\-1, ":V", ":[NYM]" ) --1>> =suggVerbInfi(\-1)           && Erreur probable. Après le pronom “à”, le verbe devrait être à l’infinitif.

    [<start>|,|(]  à  [nous|vous|lui]  ~..(?:ée?s?|ez|ai[st]?)$
        <<- /infi/ \-1.islower() and morph(\-1, ":V", ":[YEM]") --1>> =suggVerbInfi(\-1)            && Erreur probable. Après le pronom “à”, le verbe devrait être à l’infinitif.
................................................................................

TEST: rien à faire sinon {{expliqué}} ce qu’il faisait là           ->> expliquer
TEST: rien d’autre à faire que lui {{donnait}} à manger             ->> donner


__infi_nous_vous_verbe__
    [nous|vous]  ~ée?s?$
        <<- /infi/ space_after(\1, 1, 3) and morph(\2, ":Q") and not morph(<1, "V0.*[12]p") -2>> _  && Après “\1”, le verbe ne devrait pas être un participe passé.

TEST: oui, pourquoi pas, puisque nous {{intéressé}} à la question ne suffit pas à faire de nous des experts.
TEST: il faut croire que vous {{mangé}} ne nous nourrirait guère
TEST: Sommes-nous désespérés à ce point ?
TEST: Vous d’habitude si réservée.


................................................................................
!!!! Infinitif: conjonction +sujet +à +Vinfi                                                      !!

__conf_conjonction_sujet_à_vinfi__
    [lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  $:M  à  @:V1.*:Y  [<end>|)]
    [lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  $:M  à  @:V1.*:Y  , [je|tu|il|elle|iel|on|c’|nous|vous|ils|elles|iels]
        <<- /conf/ space_after(\3, 1, 1) -3:4>> ="a "+suggVerbPpas(\4, ":m:s")
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \4 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __else__ -3>> a
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \4 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __also__ -4>> =suggVerbPpas(\4, ":m:s")
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \4 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».

    [<start>|,|dont|que|qu’|lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  $:M  [lui|nous|vous]  à  @:V1.*:Y
        <<- /conf/ space_after(\4, 1, 1) -4:5>> ="a "+suggVerbPpas(\5, ":m:s")
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __else__ -4>> a
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __also__ -5>> =suggVerbPpas(\5, ":m:s")
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».

    [lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  @:D.*:s  @:[NA].*:[si]  à  @:V1.*:Y  [<end>|)]
    [lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  @:D.*:s  @:[NA].*:[si]  à  @:V1.*:Y  , [je|tu|il|elle|iel|on|c’|nous|vous|ils|elles|iels]
        <<- /conf/ space_after(\4, 1, 1) -4:5>> ="a "+suggVerbPpas(\5, ":m:s")
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __else__ -4>> a
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __also__ -5>> =suggVerbPpas(\5, ":m:s")
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».

    [<start>|,|dont|que|qu’|lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  @:D.*:s  @:[NA].*:[si]  [lui|nous|vous]  à  @:V1.*:Y
        <<- /conf/ space_after(\5, 1, 1) -5:6>> ="a "+suggVerbPpas(\6, ":m:s")
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \6 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __else__ -5>> a
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \6 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __also__ -6>> =suggVerbPpas(\6, ":m:s")
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \6 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».

TEST: quand Maria {{à parler}}, il a fallu ronger son frein                                 ->> a parlé
................................................................................
!!!! Impératif !                                                                                  !!
!!
!!

# Confusions
__imp_confusion_2e_pers_pluriel__
    [<start>|,|(]  *WORD  moi
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

    [<start>|,|(]  *WORD  la  *WORD
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)") and morph(\4, ":[ORC]", ":[NA]|>plupart/")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

    [<start>|,|(]  *WORD  [le|les|leur]  *WORD
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)") and morph(\4, ":[ORC]", ":[NA]")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

    [<start>|,|(]  *WORD  [lui|nous|vous]  *WORD
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)") and morph(\4, ":[ORCD]", ":Y")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

    [<start>|,|(|et|ou]  *WORD  [les|le|la|lui|nous|vous|leur]  [<end>|,|)]
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

TEST: {{Donner moi}} une chance                         ->> Donnez-moi
TEST: {{donner la}} et oublie-moi.                      ->> donnez-la|||là
TEST: {{prenait les}} ou volez-les                      ->> prenez-les
TEST: je vous en prie, {{prenais moi}} avec vous.       ->> prenez-moi
TEST: {{avançait moi}} de l’argent                      ->> avancez-moi
................................................................................
!!
!!!! Impératif : traits d’union manquants                                                         !!
!!
!!

__imp_union_moi__
    *WORD  moi
        <<- /imp/ space_after(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)/") and not value(<1, "|de|d’|le|la|les|l’|je|j’|me|m’|te|t’|se|s’|nous|vous|lui|leur|")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  moi
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-moi"   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Apporte moi}} ce dictionnaire.                                      ->> Apporte-moi
TEST: {{Apportez moi}} ce dictionnaire
TEST: tu me dois bien ça, {{Achèves moi}}, je t’en prie.
TEST: explique ça mieux, {{Définit moi}} ça en termes intelligibles.
TEST: Viens moi je m’ennuie.
TEST: je suis moi et tu es toi.


__imp_union_toi__
    *WORD  toi
        <<- /imp/ space_after(\1, 1, 1)
            and morph(\1, ":E:2s", ":[GM]|>(?:venir|aller|partir)/") and not value(<1, "|de|d’|le|la|les|l’|me|m’|te|t’|se|s’|nous|vous|lui|leur|")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  toi
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-toi"   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Donne toi}} du temps.
TEST: j’en ai marre, {{instruit toi}} avant de parler.


__imp_union_nous_vous_lui__
    *WORD  [nous|vous|lui]
        <<- /imp/ space_after(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)/") and morph(>1, ":|<end>", ":(?:Y|3[sp]|Oo)|>(?:en|y)/") and morph(<1, ":Cc|<start>|>,")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  [nous|vous|lui]
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/") and not morph(>1, ":Y")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-"+\3   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Donne nous}} du café.
TEST: si ça se peut, {{apprend nous}} à réussir.
TEST: Ce que Jeanne, femme de Patrick, veut vous dire de sa vie.


__imp_union_y__
    *WORD  y
        <<- /imp/ space_after(\1, 1, 1)
            and morph(\1, ":E", ":[GM]") and morph(>1, ":|<end>", ":(?:Y|3[sp]|Oo)|>en/") and morph(<1, ":Cc|<start>|>,")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Donne y}} du tien.


__imp_union_les__
    *WORD  les
        <<- /imp/ space_after(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)") and morph(>1, ":|<end>|>,", ":(?:N|A|Y|B|3[sp])|>(?:pour|plus|moins|mieux|peu|trop|très|en|y)/") and morph(<1, ":Cc|<start>|>,")
        ->> \1-les                                      && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  les
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
            and morph(>1, ":|<end>|>,", ":(?:N|A|Y|B|3[sp])|>(?:pour|plus|moins|mieux|peu|trop|très|en|y)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-les"   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{chante les}} avec conviction
TEST: tu dois finir, {{finit les}}.
TEST: Veut les en convaincre.
TEST: Invite les plus intelligents…
................................................................................
TEST: Prenez les 5 ou 6 revues les plus connues.
TEST: Allez les chercher.
TEST: Soyez les plus gentils qu’on puisse imaginer.


__imp_union_le_la_leur__
    *WORD  [le|la|leur]
        <<- /imp/ space_after(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)/") and morph(>1, ":|<end>|>,", ":(?:N|A|Q|Y|MP|H|T)|>(?:pour|plus|moins|mieux|peu|plupart|trop|très|en|y|une?|leur|lui)/")
            and morph(<1, ":Cc|<start>|>,")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  [le|la|leur]
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
            and morph(>1, ":|<end>|>,", ":(?:N|A|Y|B|T|MP|3[sp])|>(?:pour|plus|moins|mieux|peu|plupart|trop|très|en|y|une?|leur|lui)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-"+\3   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Prends le}} avec toi.
TEST: {{Dites leur}} que nous sommes là.
TEST: c’est ça, {{apprend le}} parce que c’est compliqué.
TEST: {{pardonne leur}}, ils ne savent pas ce qu’ils font
................................................................................
TEST: Daignez le lui permettre
TEST: Daignez la leur donner



__imp_union_en__
    *WORD  en
        <<- /imp/ space_after(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:aller|partir)/") and morph(>1, ":|<end>|>,", ":(?:N|A|Q|Y|M|P|B|H|T|D|Ov)|>(?:plus|moins|mieux|peu|trop|très|une?)/") and morph(<1, ":Cc|<start>|>,")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  en
        <<- /imp/ space_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:aller|partir)/")
            and morph(>1, ":|<end>|>,", ":(?:N|A|Y|M|P|B|3[sp]|D|Ov)|>(?:plus|moins|mieux|peu|trop|très|une?)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-"+\3   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{restons en}} là.
TEST: tu crois ça, {{donnes en}} encore
TEST: {{Venons en}} à des exemples précis
TEST: Intercède en ma faveur
................................................................................
TEST: Reviens en en apportant plus encore.
TEST: Schématisons en deux positions possibles.
TEST: Finis en ne comptant que sur toi-même


__imp_laisser_le_la_les_infi__
    [laisse|laissons|laissez]  [le|la|les]  *WORD
        <<- /imp/ space_after(\1, 1, 1) and morph(\3, ":(?:Y|Ov)", ":[NAB]") and not morph(<1, ":O[sv]")
        -1:2>> \1-\2                                    && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Laisse les}} entrer…
TEST: {{Laissez la}} venir…
TEST: {{laisse le}} faire
TEST: Laisse les chiens tranquilles
TEST: Laissez la peste leur pourrir la vie encore quelque temps.
................................................................................

TEST: {{accorde-t-en}} plus.
TEST: {{t-en}} lasser, impossible


__imp_union_m_t_en_y__
    *WORD  [m’|t’]  [en|y]
        <<- /imp/ space_after(\1, 1, 1) and morph(\1, ":E", ":[MG]") and morph(>1, ":|<end>|>,", ":(?:Y|[123][sp])")
        ->> \1-\2\3                                     && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{donne m’en}}, s’il te plaît.
TEST: Mélanie t’en donne souvent.


__imp_union_verbe_pronom_moi_toi_lui__
    [/-le|/-la|/-les]  [moi|toi]
        <<- /imp/ space_after(\1, 1, 1) and morphVC(\1, ":E")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: les analyses, {{donne-les moi}}
TEST: {{Donne-les lui}}.


__imp_union_verbe_pronom_nous_vous__
    [/-le|/-la|/-les]  [nous|vous|lui|leur]
        <<- /imp/ space_after(\1, 1, 1) and morphVC(\1, ":E") and morph(>1, ":[RC]|<end>|>,", ":Y")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{apporte-les nous}}


__imp_union_verbe_pronom_en_y_leur__
    [/-moi|/toi] en
        <<- /imp/ space_after(\1, 1, 1) and morphVC(\1, ":E") and morph(>1, ":[RC]|<end>|>,", ":[NAY]")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [/-lui|/-nous|/-vous|/-leur]  [en|y]
        <<- /imp/ space_after(\1, 1, 1) and morphVC(\1, ":E") and morph(>1, ":[RC]|<end>|>,", ":[NAY]")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{donnez-moi en}}
TEST: {{prends-leur en}}
TEST: {{Donnez-nous en}}.
TEST: Alors, {{parais y}} grande et lumineuse.


__imp_union_aller_y!5__
    [viens|venez|venons|allons|allez] y
        <<- /imp/ space_after(\1, 1, 1) and not morph(>1, ":Y") ->> \1-\2           && Il manque un trait d’union.

    [va|vas] [y|z-y|z’y]
        <<- /imp/ space_after(\1, 1, 1) and not value(<1, "|tu|il|elle|on|ne|n’|") and not morph(>1, ":Y")
        ->> vas-y                                                                   && Il manque un trait d’union.

TEST: {{allons y}}
TEST: {{vas y}}
TEST: {{Viens y}}.
TEST: Il va y àvoir des contingents étrangers qui débarquent à Paris. (erroné)
TEST: Viens y faire un test.



__imp_union_convenir_en__
    [conviens|convenez|convenons] en
        <<- /imp/ space_after(\1, 1, 1) and not value(>1, "|partie|") ->> \1-\2     && Il manque un trait d’union.


TEST: c’est une belle affaire malgré son prix élevé, {{convenez en}}…


# Autres tests
TEST: Ne rien céder.
................................................................................
!!!! Traits d’union manquants (formes interrogatives)                                             !!
!!
!!

__inte_union_je!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..[éèe]$  je  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..[éèe]$  je  @:¬:1s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1[sŝś]", ":[GW]")
        -2:3>> =\2[:-1]+"é-je"                                                                      && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~..[éèe]$  je  [<end>|,|)]
    *WORD  ~..[éèe]$  je  @:¬:1s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1[sŝś]", ":[GNW]") and not value(\1, "|je|j’|il|elle|")
        -2:3>> =\2[:-1]+"é-je"                                                                      && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[is]$  je  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[is]$  je  @:¬:1s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1s", ":[GW]")
        -2:3>> \2-je                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [ai|avais|eus|eussé|eusse|aurai|aurais|suis|étais|fus|fussé|fusse|serai|serais]  je
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-je                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~.[is]$  je  [<end>|,|)]
    *WORD  ~.[is]$  je  @:¬:1s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1s", ":[GNW]") and not value(\1, "|je|j’|tu|")
        -2:3>> \2-je                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: quel animal {{dessine je}}
TEST: {{mangé je}} {{ça}} avec dégoût ?
TEST: {{viendrais je}} à la fête ?
TEST: {{ai je}} enfin trouvé la réponse à mes questions ?
TEST: quel amour {{connaîtrai je}} si je juge sans cesse ?


__inte_union_tu!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[sx]$  tu  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[sx]$  tu  @:¬:2s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2s", ":[GW]")
        -2:3>> \2-tu                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [as|avais|eus|eusses|es|auras|aurais|étais|fus|fusses|seras|serais]  tu
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-tu                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~.s$  tu  [<end>|,|)]
    *WORD  ~.s$  tu  @:¬:2s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2s", ":[GNW]") and not value(\1, "|je|j’|tu|")
        -2:3>> \2-tu                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{Viendras tu}} là ?
TEST: et toi, {{as tu}} découvert le secret de l’immortalité ?
TEST: quelle vie {{connaitras tu}} ?
TEST: Comment {{peux tu}} ?


__inte_union_il_on!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[td]$  [il|on]  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[td]$  [il|on]  @:¬:3s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GW]")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [avait|eut|eût|est|aurait|était|fut|fût|serait]   [il|on]
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~.[td]$  [il|on]  [<end>|,|)]
    *WORD  ~.[td]$  [il|on]  @:¬:3s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GNW]") and not value(\1, "|ce|il|elle|on|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{prend on}} le temps d’y réfléchir ?
TEST: De quel droit {{vient il}} m’{{ennuyer}} ?
TEST: comment {{était il}}
TEST: Pourquoi le message de Jean {{était il}} très radical pour son époque ?
TEST: Pourquoi le message de Jean était‐il très radical pour son époque ? (Hyphen U+2010)


__inte_union_ce!7__
    [<start>|,|(] [est|était|étaient] ce ?pas¿ [le|la|les|l’|un|une|de|des|d’|ce|cet|cette|ces|quelques|plusieurs|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs]
    [<start>|,|(] [est|était|étaient] ce ?pas¿ @:G¬:[NA].*:[me]:[si]|>(?:qu[ei’]|pourquoi|dont)/
    [<start>|,|(] [est|était|étaient] ce [ton|son] @:N¬:A.*:[me]:[si]
        <<- /inte/ space_after(\2, 1, 1) -2:3>> \2-\3                                               && Forme interrogative ? Mettez un trait d’union.

TEST: N’{{était ce}} pas le bon moment pour y songer.                   ->> était-ce
TEST: Qu’était ce raffut ?
TEST: Cette liberté, formalisée par le libéralisme économique, dès les Physiocrates (vers 1750), est ce dont le despotisme économique a besoin pour que son soubassement économique fonctionne mécaniquement.


__inte_union_elle_iel!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[td]$  [elle|iel]  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[td]$  [elle|iel]  @:¬:3s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GW]")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [avait|eut|eût|aurait|est|était|fut|fût|serait]   [elle|iel]
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~.[td]$  [elle|iel]  [<end>|,|)]
    *WORD  ~.[td]$  [elle|iel]  @:¬:3s
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GNW]") and not value(\1, "|ce|c’|ça|ç’|il|elle|on|iel|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{vient elle}} souvent ?
TEST: comment {{sait elle}}
TEST: qui {{était elle}} ?
TEST: quel travail {{avait elle}} accompli ?
TEST: {{sait iel}} comment faire ?
................................................................................
TEST: je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça.
TEST: C’était elle qui avait pris le contrôle.


__inte_union_nous2!7__
    ,  ~ons$  nous  [<end>|,|)]
    ,  ~ons$  nous  @:¬:(?:1p|Y)
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    <start>  ~ons  nous
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|allons|venons|partons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons  nous
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [sommes|étions|fûmes|fussions|serons|serions|avons|avions|eûmes|eussions|aurons|aurions]  nous
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-nous                                                                              && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~ons$  nous  [<end>|,|)]
    *WORD  ~ons$  nous  @:¬:(?:Y|1p)
        <<- /inte/ space_after(\2, 1, 1) and
            ( (value(\2, "|avions|") and not morph(\1, ":A.*:[me]:[sp]") and not morph(\-1, ":(:?3[sp]|Ov)"))
            or (morph(\2, ":V.*:1p", ":[GNW]") and not morph(\1, ":Os")) )
        -2:3>> \2-nous                                                                              && Forme interrogative ? Mettez un trait d’union.

TEST: Ils savent, réellement {{croyons nous}}, comment résoudre le problème, mais ils n’ont fait que de la merde.
TEST: y {{retrouverons nous}} enfin la tranquilité ?
TEST: comment alors {{irons nous}} à la pêche ?
................................................................................
TEST: pourquoi {{entendons nous}} souvent ces injonctions idiotes ?
TEST: les avions nous font rêver.


__inte_union_vous2!7__
    ,  ~ez$  vous  [<end>|,|)]
    ,  ~ez$  vous  @:¬:(?:2p|Y)
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    <start>  ~ez$  vous
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|allez|venez|partez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ez$  vous
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [êtes|étiez|fûtes|fussiez|serez|seriez|avez|aviez|eûtes|eussiez|aurez|auriez]  vous
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-vous                                                                              && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~..e[zs]$  vous  [<end>|,|)]
    *WORD  ~..e[zs]$  vous  @:¬:(?:Y|2p)
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GNW]") and not value(\2, "|veuillez|") and not morph(\1, ":Os")
        -2:3>> \2-vous                                                                              && Forme interrogative ? Mettez un trait d’union.

TEST: ils seront, me {{direz vous}}, étroitement surveillés, mais rien ne le garantit.
TEST: Mais {{soutiendrez vous}} cette proposition ?
TEST: pourquoi ailleurs {{soutenez vous}} ces gens-là ?
TEST: comment {{êtes vous}} arrivées là ?
TEST: quel genre de femme {{voulez vous}} réellement ?
................................................................................
TEST: quel homme {{voulez vous}} qu’il devienne
TEST: Veuillez vous instruire avant de contester ces mesures.


__inte_union_ils!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  @:¬:3p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GW]")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [ont|avaient|eurent|eussent|auront|auraient|sont|étaient|furent|fussent|seront|seraient]  ils
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~[eo]nt$  ils  [<end>|,|)]
    *WORD  ~[eo]nt$  ils  @:¬:3p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GNW]") and not value(\1, "|ce|ils|elles|iels|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{Viendront ils}} demain ?
TEST: qui {{seront ils}} une fois adultes ?
TEST: dans quel retaurant {{iront ils}} ?


__inte_union_elles_iels!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  [elles|iels]  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  [elles|iels]  @:¬:3p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GW]")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [ont|avaient|eurent|eussent|auront|auraient|sont|étaient|furent|fussent|seront|seraient]  [elles|iels]
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~[eo]nt$  [elles|iels]  [<end>|,|)]
    *WORD  ~[eo]nt$  [elles|iels]  @:¬:3p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GNW]") and not value(\1, "|ce|ils|elles|iels|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{viennent elles}} souvent ?
TEST: quand {{furent elles}} recrutées ?
TEST: quels éléments {{examinèrent elles}} ?
TEST: {{connaissent iels}} leurs droits ?

................................................................................
__conj_beaucoup__
    beaucoup    @:V¬:(?:P|Q|G|Y)
        <<- /conj/ not morph(<1, ":[VR]") >>>
        <<- /conj/ tag(\1, "_bcp_plur_") and not morph(\2, ":3p")
        -2>> =suggVerb(\2, ":3p")                                   && Conjugaison erronée. Accord avec “\1”. Le substantif suivant étant au pluriel, le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and tag(\1, "_bcp_sing_") and not morph(\2, ":3s")
        -2>> =suggVerb(\2, ":3s")                                   && Conjugaison erronée. Accord avec “\1”. Le substantif suivant étant au singulier, le verbe devrait être à la 3ᵉ personne du singulier.
        <<- /conj/ __else__ and \2 != "a" and not tag(\1, "_bcp_sing_") and not morph(\2, ":3p") and not (space_after(\1, 1, 2) and morph(\2, ":V0"))
        -2>> =suggVerb(\2, ":3p")                                   && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    beaucoup    qui  @:V¬:(?:3p|P|G)
        <<- /conj/ -3>> =suggVerb(\3, ":3p")                        && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: beaucoup {{vienne}}
TEST: Beaucoup d’hommes y {{était}}.
................................................................................
!!
!!

# Règles casse-gueule, prudence…

__conj_nom_propre_virgule__
    <start>  $:M  ,  @:3s¬:[NAGEM]  [<end>|,|)]
        <<- /conj/ space_after(\2, 0, 0) -2:3>> \2
        && Si “\2” est le sujet de “\4”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\4” devrait être à l’impératif (à moins d’une inversion verbe-sujet).
        <<- /conj/ __also__ -4>> =suggVerbTense(\4, ":E", ":2s")
        && Si “\2” est le sujet de “\4”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\4” devrait être à l’impératif (à moins d’une inversion verbe-sujet).

    <start>  $:M  ,  @:3s¬:[NAGEM]  @:A.*:[si]
        <<- /conj/ space_after(\2, 0, 0) and morph(\4, ">(?:être|devenir|redevenir|sembler|para[iî]tre)/") -2:3>> \2
        && Si “\2” est le sujet de “\4”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\4” devrait être à l’impératif (à moins d’une inversion verbe-sujet).
        <<- /conj/ __also__ -4>> =suggVerbTense(\4, ":E", ":2s")
        && Si “\2” est le sujet de “\4”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\4” devrait être à l’impératif (à moins d’une inversion verbe-sujet).

TEST: {{Paul,}} {{vient}}                                               ->> Paul|||viens
TEST: {{Anton,}} {{sera}} toujours prêt à vous écouter                  ->> Anton|||sois
TEST: Maria, avance devant toi.
TEST: Céline, crut deviner son époux, en avait assez.
TEST: Valérie, devina Éric, n’avait pas du tout l’intention de mener à bien la tâche qu’il voulait la voir accomplir.


__conj_det_nom_sing_virgule__
    <start>  [un|le|la|l’|ce|cet|cette|mon|ton|son|ma|ta|sa]  @:[NA]  ,  @:3s¬:[NAGEM]  [<end>|,|les|des|ces|mes|tes|ses|nos|vos|leurs]
        <<- /conj/ space_after(\3, 0, 0) -3:4>> \3
        && Si “\2 \3” est le sujet de “\5”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\5” devrait être à l’impératif (à moins d’une inversion verbe-sujet).
        <<- /conj/ __also__ -5>> =suggVerbTense(\5, ":E", ":2s")
        && Si “\2 \3” est le sujet de “\5”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\5” devrait être à l’impératif (à moins d’une inversion verbe-sujet).

    <start>  [un|le|la|l’|ce|cet|cette|mon|ton|son|ma|ta|sa]  @:[NA]  ,  @:3s¬:[NAGEM]  @:A.*:[si]
        <<- /conj/ space_after(\3, 0, 0) and morph(\5, ">(?:être|devenir|redevenir|sembler|para[iî]tre)/")  -3:4>> \3
        && Si “\2 \3” est le sujet de “\5”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\5” devrait être à l’impératif (à moins d’une inversion verbe-sujet).
        <<- /conj/ __also__ -5>> =suggVerbTense(\5, ":E", ":2s")
        && Si “\2 \3” est le sujet de “\5”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\5” devrait être à l’impératif (à moins d’une inversion verbe-sujet).

TEST: Ce {{soir,}} {{vient}}.                                           ->> soir|||viens
TEST: l’{{homme,}} {{devient}} difficile.                               ->> homme|||deviens
TEST: ce matin, viens me voir.
TEST: l’Angola, Cuba et l’Afrique du Sud signent à New York, sous l’égide des Soviétiques et des Américains, un accord aboutissant au retrait des troupes cubaines d’Angola.
TEST: L’amour, expliqua la femme.


__conj_det_nom_plur_virgule__
    <start>  [les|ces|mes|tes|ses|plusieurs|quelques|certains|certaines|maints|maintes]  @:[NA].*:[pi]  ,  @:3p¬:[NAGEM]  [<end>|,|)]
        <<- /conj/ space_after(\3, 0, 0)
        -3:4>> \3                                                               && La virgule est probablement superflue (on ne sépare pas le verbe du sujet).

    <start>  [les|ces|mes|tes|ses|plusieurs|quelques|certains|certaines|maints|maintes]  @:[NA].*:[pi]  ,  @:3p¬:[NAGEM]  @:A.*:[pi]
        <<- /conj/ space_after(\3, 0, 0) and morph(\5, ">(?:être|devenir|redevenir|sembler|para[iî]tre)/")
        -3:4>> \3                                                               && La virgule est probablement superflue (on ne sépare pas le verbe du sujet).

TEST: Ces {{imbéciles,}} se ridiculisent.                               ->> imbéciles
TEST: les {{hommes,}} deviennent de plus en plus arrogants.             ->> hommes
TEST: Les questions de faisabilité, de mise en pratique ont vraiment été abordées.
TEST: Ces difficultés, songèrent mes amis, allaient les mettre à la torture.








|


|


|



|


|


|







 







|






|







 







|







 







|







 







|


|







 







|







 







|







 







|







 







|



|


|


|







 







|


|







 







|







 







|







 







|




|



|



|







 







|




|



|



|







 







|







 







|







 







|







 







|







 







|







 







|







 







|







 







|


|







 







|







 







|



|







 







|







 







|







 







|








|










|








|







 







|



|



|



|



|







 







|




|












|




|








|




|









|








|




|







 







|





|







 







|




|







 







|







 







|








|








|







|



|










|


|












|







 







|




|




|



|




|












|



|




|











|



|




|













|









|



|




|







 







|



|



|



|




|







 







|



|



|



|




|







 







|



|




|










|



|




|







 







|







 







|





|













|





|













|



|







1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
....
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
....
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
....
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
....
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
....
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
....
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
....
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
....
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
....
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
....
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
....
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
....
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
....
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
....
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
....
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
....
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
.....
11182
11183
11184
11185
11186
11187
11188
11189
11190
11191
11192
11193
11194
11195
11196
.....
17895
17896
17897
17898
17899
17900
17901
17902
17903
17904
17905
17906
17907
17908
17909
.....
20989
20990
20991
20992
20993
20994
20995
20996
20997
20998
20999
21000
21001
21002
21003
.....
21353
21354
21355
21356
21357
21358
21359
21360
21361
21362
21363
21364
21365
21366
21367
.....
21444
21445
21446
21447
21448
21449
21450
21451
21452
21453
21454
21455
21456
21457
21458
21459
21460
21461
.....
21550
21551
21552
21553
21554
21555
21556
21557
21558
21559
21560
21561
21562
21563
21564
.....
23396
23397
23398
23399
23400
23401
23402
23403
23404
23405
23406
23407
23408
23409
23410
23411
23412
23413
23414
.....
24800
24801
24802
24803
24804
24805
24806
24807
24808
24809
24810
24811
24812
24813
24814
.....
25288
25289
25290
25291
25292
25293
25294
25295
25296
25297
25298
25299
25300
25301
25302
.....
25764
25765
25766
25767
25768
25769
25770
25771
25772
25773
25774
25775
25776
25777
25778
25779
25780
25781
25782
25783
25784
25785
25786
25787
25788
25789
25790
25791
25792
25793
25794
25795
25796
25797
25798
25799
25800
25801
25802
25803
25804
25805
25806
25807
.....
29010
29011
29012
29013
29014
29015
29016
29017
29018
29019
29020
29021
29022
29023
29024
29025
29026
29027
29028
29029
29030
29031
29032
29033
29034
29035
29036
29037
29038
29039
29040
.....
29207
29208
29209
29210
29211
29212
29213
29214
29215
29216
29217
29218
29219
29220
29221
29222
29223
29224
29225
29226
29227
29228
29229
29230
29231
29232
29233
29234
29235
29236
29237
29238
29239
29240
29241
29242
29243
29244
29245
29246
29247
29248
29249
29250
29251
29252
29253
29254
29255
29256
29257
29258
29259
29260
29261
29262
29263
29264
29265
29266
29267
29268
29269
29270
29271
29272
29273
29274
29275
29276
29277
29278
29279
29280
29281
29282
.....
29283
29284
29285
29286
29287
29288
29289
29290
29291
29292
29293
29294
29295
29296
29297
29298
29299
29300
29301
29302
29303
.....
29319
29320
29321
29322
29323
29324
29325
29326
29327
29328
29329
29330
29331
29332
29333
29334
29335
29336
29337
29338
.....
29344
29345
29346
29347
29348
29349
29350
29351
29352
29353
29354
29355
29356
29357
29358
.....
29383
29384
29385
29386
29387
29388
29389
29390
29391
29392
29393
29394
29395
29396
29397
29398
29399
29400
29401
29402
29403
29404
29405
29406
29407
29408
29409
29410
29411
29412
29413
29414
29415
29416
29417
29418
29419
29420
29421
29422
29423
29424
29425
29426
29427
29428
29429
29430
29431
29432
29433
29434
29435
29436
29437
29438
29439
29440
29441
29442
29443
29444
29445
29446
29447
29448
29449
29450
29451
29452
29453
29454
.....
30346
30347
30348
30349
30350
30351
30352
30353
30354
30355
30356
30357
30358
30359
30360
30361
30362
30363
30364
30365
30366
30367
30368
30369
30370
30371
30372
30373
30374
30375
30376
30377
30378
30379
30380
30381
30382
30383
30384
30385
30386
30387
30388
30389
30390
30391
30392
30393
30394
30395
30396
30397
30398
30399
30400
30401
30402
30403
30404
30405
30406
30407
30408
30409
30410
30411
30412
30413
30414
30415
30416
30417
30418
30419
30420
30421
30422
30423
30424
30425
30426
30427
30428
30429
30430
30431
30432
30433
30434
30435
30436
30437
30438
30439
30440
30441
30442
30443
30444
30445
30446
30447
30448
30449
30450
30451
30452
30453
30454
30455
.....
30456
30457
30458
30459
30460
30461
30462
30463
30464
30465
30466
30467
30468
30469
30470
30471
30472
30473
30474
30475
30476
30477
30478
30479
30480
30481
30482
30483
30484
30485
30486
30487
.....
30492
30493
30494
30495
30496
30497
30498
30499
30500
30501
30502
30503
30504
30505
30506
30507
30508
30509
30510
30511
30512
30513
30514
30515
30516
30517
30518
30519
30520
30521
30522
30523
.....
30525
30526
30527
30528
30529
30530
30531
30532
30533
30534
30535
30536
30537
30538
30539
30540
30541
30542
30543
30544
30545
30546
30547
30548
30549
30550
30551
30552
30553
30554
30555
30556
30557
30558
30559
30560
30561
30562
30563
30564
30565
30566
30567
30568
.....
31138
31139
31140
31141
31142
31143
31144
31145
31146
31147
31148
31149
31150
31151
31152
.....
32042
32043
32044
32045
32046
32047
32048
32049
32050
32051
32052
32053
32054
32055
32056
32057
32058
32059
32060
32061
32062
32063
32064
32065
32066
32067
32068
32069
32070
32071
32072
32073
32074
32075
32076
32077
32078
32079
32080
32081
32082
32083
32084
32085
32086
32087
32088
32089
32090
32091
32092
32093
32094
32095
32096
32097
32098
32099
32100
!!!
!!! Purge de la phrase                                                                            !!
!!!
!!!

__tag_mots_entre_guillemets__
    «  [*WORD|*WORDELD]  »
        <<- space(\1, 0, 1) and space(\2, 0, 1) /2>> eg1mot

    «  [*WORD|*WORDELD]  [*WORD|*WORDELD]
        <<- space(\1, 0, 1) /2:0>> egxmot

    [*WORD|*WORDELD]  [*WORD|*WORDELD]  »
        <<- space(\2, 0, 1) /1:2>> egxmot

    [“|”|"]     [*WORD|*WORDELD]   [“|”|"]
    [‘|'|’|`]   [*WORD|*WORDELD]   [‘|'|’|`]
        <<- space(\1, 0, 0) and space(\2, 0, 0) /2>> eg1mot

    ["|“|”]  [*WORD|*WORDELD]  *[*WORD|*WORDELD]
        <<- space(\1, 0, 0) /2:0>> egxmot

    [*WORD|*WORDELD]  [*WORD|*WORDELD]  ["|“|”]
        <<- space(\2, 0, 0) /1:2>> egxmot


__purge_guillemets__
    [«|»|“|”|"|„|`]
        <<- ~>> *


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

    ( … )
        <<- ->> […]                 && Pour indiquer une troncature de texte, on utilise usuellement des crochets.
        <<- ~>> *

    (  [re|ré]  )  *WORD
    [  [re|ré]  ]  *WORD
        <<- space(\3, 0, 0) ~1:3>>  *

    [  *NUM  ]
    [  …  ]
        <<- ~>> *

    **  [  *WORD  ]  **
        <<- space(\1, 1, 3) and space(\-2, 1, 3) >>>
        <<- morph(\3, ":G") ~2:4>> |\2|
        <<- __else__ ~2:4>> *

    ## chapitres, références
    (  [*WORD|*NUM]  ,  *NUM  )
    [  [*WORD|*NUM]  ,  *NUM  ]
    {  [*WORD|*NUM]  ,  *NUM  }
................................................................................
        <<- /virg/ ->> …                    && Typographie : pas de virgule avant les points de suspension.

TEST: ceci, cela{{, …}}                                                     ->> …


__virg_virgule_après_point__
    *WORD  .  ,
        <<- /virg/ space(\1, 0, 0) and space(\2, 0, 0)
            and not value(\1, "|etc|fig|hab|litt|fig|hab|litt|circ|coll|ref|réf|étym|suppl|bibl|bibliogr|cit|vol|déc|nov|oct|janv|juil|avr|sept|pp|")
            and \1.__len__() > 1
        -2:3>> ,|.                                                          && Pas de virgule après un point (sauf éventuellement après une abréviation).

TEST: Les chiens, les chats{{.,}} les poules.                               ->> ,|.
TEST: A., dans le meilleur des cas, s’abstenait de tout commentaire

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

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

    [  [m|t|s]  ]  [a|on|es]
    [  [n|v]    ]  [otre|ôtre]
        <<- space(\1, 0, 0) and space(\2, 0, 0) and space(\3, 0, 0) ~>> ␣\2\4
        <<- =>> setmeta(\1, "WORD")

TEST: [s]es {{homme}}                                           ->> hommes
TEST: des effets sur [s]es états d’âme, [s]on corps


__fusions_noms_communs__
................................................................................

    nec plus ultra
    terra incognita
    statu quo
        <<- ~>> ␣

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

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

    cul et chemise
    mari et femme
    père et mère
    papa et maman
    frère et sœur
    cousin et cousine
................................................................................
TEST: elles sont cul et chemise
TEST: ils sont frère et sœur
TEST: iels étaient mari et femme


__fusions_noms_communs_séparés_slash__
    *WORD  /  *WORD
        <<- space(\1, 0, 1) and space(\2, 0, 1) and morph(\1, ":N") and morph(\-1, ":N") and not (morph(\1, "[123][sp]") and morph(<1, ":O[vs]")) ~>> ␣
        <<- __also__ =>> define(\1, ":N:e:i")

TEST: Elle peut se cacher / rendre visible par le petit “+” au-dessus.


__fusions_noms_propres__
    d’ Alembert
................................................................................
TEST: __ocr__ X
TEST: __ocr__ V.


# virgules
__ocr_virgules__
    [il|le|la|l’|les|de|d’|ne|n’|me|m’|te|t’|se|s’|à|ce|cet|cette|mon|ma|ta|sa|mes|tes|ses|nos|vos|quelque|quelques|au|aux] ,
        <<- /ocr/ space(\1, 0, 0) and not \1.isupper() or value(\1, "|à|") ->> \1             && Erreur de numérisation ? Virgule superflue ?

TEST: __ocr__ Pierre entre pour {{se,}} rapprocher de L
TEST: __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ?


# A
__ocr_A__
................................................................................
TEST: __ocr__ {{lu}} as si bien réussi
TEST: __ocr__ contre {{los}} impies


# M. / Mr / M
__ocr_mr__
    M ,  /_Tit_
        <<- /ocr/ space(\1, 0, 1) -1:2>> "Mr |M. "                                                                  && Erreur de numérisation ?

    M  /_Tit_
        <<- /ocr/ -1>> "Mr |M. "                                                                    && Erreur de numérisation ?

TEST: __ocr__ {{M,}} Patrick nous a oubliés.
TEST: __ocr__ Rencontre avec {{M}} Black.

................................................................................
!!!! Élisions & euphonie                                                                          !!
!!
!!

# élisions
__eleu_élisions_manquantes__
    [le|la|de]  ~^[aâeéèêiîoôuûyœæh].
        <<- /eleu/ space(\1, 1, 1) and not re.search("(?i)^(?:I(?:I|V|X|er|ᵉʳ|ʳᵉ|è?re))", \2) and morph(\2, ":", ":G|;é")
        -1:.2>> =\1[0:1]+"’"                                                && Élision de l’article devant un mot commençant par une voyelle.|http://fr.wikipedia.org/wiki/Élision

    si [il|ils]
        <<- /eleu/ space(\1, 1, 1) -1:.2>> s’                         && Il faut élider “si” et l’accoler au pronom.|http://fr.wikipedia.org/wiki/Élision

    que [il|ils|elle|elles|on|iel|iels]
        <<- /eleu/ space(\1, 1, 1) -1:.2>> qu’                        && Il faut élider “que” et l’accoler au pronom.|http://fr.wikipedia.org/wiki/Élision

    [je|ne|me|te|se]  ~^[aâeéèêiîoôuûyœæh].
        <<- /eleu/ not \1.isupper() and space(\1, 1, 1) and morph(\2, ":V", ":Q|;é")
        -1:.2>> =\1[0:1]+"’"                                                && Il faut élider le pronom “\1” et l’accoler au verbe.|http://fr.wikipedia.org/wiki/Élision

TEST: {{le }}amour                                                          ->> l’
TEST: {{la }}imagination                                                    ->> l’
TEST: {{de }}amour                                                          ->> d’
TEST: {{de }}est en ouest                                                   ->> d’
TEST: je crois que {{si }}ils viennent, ils seront mécontents               ->> s’
................................................................................
    *NUM  -  ~^\d\d?$  -  ~^\d{2,5}$
        <<- \1.isdigit() ~>> ␣
        <<- =>> setmeta(\1, "DATE")


__date_jour_mois_année__
    31 [avril|juin|septembre|novembre]
        <<- /date/ space(\1, 1, 1) ->> 30 \2                                                  && Cette date est invalide. Il n’y a que 30 jours en \2.

    [30|31] février
        <<- /date/ space(\1, 1, 1) ->> 28 février|29 février                                  && Cette date est invalide. Il n’y a que 28 ou 29 jours en février.

    ~^\d\d?$  [janvier|février|mars|avril|mai|juin|juillet|aout|août|septembre|octobre|novembre|décembre]  ~^\d{2,5}$
        <<- /date/ not checkDate(\1, \2, \3) ->> _                                                  && Cette date est invalide.

TEST: le {{31 avril}}
TEST: le {{30 février}}
TEST: {{29 février 2011}}
................................................................................

__tu_préfixe_xxxo__
    [macro|magnéto|micro|paléo|rétro|rhino|stéréo]  *WORD
        <<- /tu/ analyse_with_next(\1, "-", ":")
        ->> \1-\2                                                                                   && S’il s’agit d’un seul mot, il manque un trait d’union.

    [électro|ferro|hydro|labio|médico|nano|néo|neuro|physico|politico|sino|socio]  *WORD
        <<- /tu/ space(\1, 1, 1) and (morph(\2, ":N") or analyse_with_next(\1, "-", ":"))
        ->> \1-\2                                                                                   && S’il s’agit d’un seul mot, il manque un trait d’union.

TEST: {{ferro électrique}}                              ->> ferro-électrique
TEST: {{rétro ingénierie}}.                             ->> rétro-ingénierie


__tu_préfixe_divers__
................................................................................
TEST: Les {{va-t-en guerre}} sont de sortie.
TEST: Elle va t’en donner, des devoirs.


# est-ce … ?
__tu_est_ce__
    est ce  @:¬:N.*:[me]:[si]|>qui/
        <<- /tu/ morph(<1, ":Cs|<start>") and space(\1, 1, 1) -1:2>> est-ce                   && S’il s’agit d’une interrogation, il manque un trait d’union.

TEST: {{est ce}} que c’est grave ?                                              ->> est-ce
TEST: qu’{{est ce}} que c’est ?                                                 ->> est-ce
TEST: elles reviendront, {{n’est ce pas}} ?
TEST: nous en sommes à l’étape où nous voulons définir ce qu’est ce projet
TEST: c’est ce que nous pensions.

................................................................................
!!!! Trait d’union : formes interrogative (nous/vous)                                             !!

__inte_union_nous1!7__
    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~ons$  nous
    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~ons$  nous
    [ne|n’]  [le|la|l’|les]                  [lui|leur|en|y]             ~ons$  nous
    [ne|n’]  [lui|leur|y]                    en                          ~ons$  nous
        <<- /inte/ space(\-2, 1, 1) and morph(\-2, ":V.*:1p", ":[GW]") and not tagbefore(\1, "_1p_")
        --2:-1>> \-2-\-1                                                                            && Forme interrogative ? Mettez un trait d’union.

    ,  ~ons$  nous  [<end>|,|)]
    ,  ~ons$  nous  @:¬:(?:1p|Y)
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    <start>  ~ons  nous
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|allons|venons|partons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons  nous
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: n’y {{retrouverons nous}} jamais la tranquilité ?
TEST: pourquoi n’en {{entendons nous}} jamais parler ?
TEST: que {{pouvons nous}} dans cette vie
TEST: que {{pouvons nous}} faire ?
TEST: {{Connaissons nous}} réellement cette langue ?
................................................................................


__inte_union_vous1!7__
    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~ez$  vous
    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~ez$  vous
    [ne|n’]  [le|la|l’|les]                  [lui|leur|en|y]             ~ez$  vous
    [ne|n’]  [lui|leur|y]                    en                          ~ez$  vous
        <<- /inte/ space(\-2, 1, 1) and morph(\-2, ":V.*:2p", ":[GW]") and not tagbefore(\1, "_2p_")
        --2:-1>> \-2-\-1       && Forme interrogative ? Mettez un trait d’union.

    ,  ~ez$  vous  [<end>|,|)]
    ,  ~ez$  vous  @:¬:(?:2p|Y)
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    <start>  ~ez$  vous
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|allez|venez|partez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ez$  vous
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: ne {{soutiendrez vous}} pas cette proposition ?
TEST: n’en {{voulez vous}} jamais à ces gens ?
TEST: je suis, {{penserez vous}}, un imbécile.
TEST: {{pouvez vous}} réussir ?
TEST: comment {{pensez vous}} y parvenir
................................................................................
TEST: Tape-toi Patrick.


!!!! Apostrophe manquante (2)                                                                     !!

__typo_apostrophe_manquante_audace__
    <start>  [L|D|S|N|C|J|M|T|Ç]  ~^[aeéiouhAEÉIOUHyîèêôûYÎÈÊÔÛ]
        <<- /mapos/ space(\2, 1, 1) -2:.3>> =\2+"’"                                           && 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                                        !!

................................................................................
    [de|d’]  [l’|leur]  @:[123][sp]¬:[GNAQ]
        <<- /conf/ not \3.istitle() -3>> =suggSimil(\3, ":[NA]:.:[si]", True)                       && Incohérence avec « \1 \2 » : “\3” est une forme verbale conjuguée.

TEST: de l’{{arrivait}}


    [de|d’]  le  *WORD
        <<- /conf/ space(\1, 0, 1) and morph(\3, ":[NAQ].*:[me]", ":[YG]") and not \3.istitle()
            and not (value(\3, "|mal|") and morph(>1, ":Y")) -1:2>> du                              && Incohérence avec « \1 \2 » : “\3” est un nom ou un adjectif.
        <<- /conf/ morph(\3, ":[123][sp]") -3>> =suggVerbInfi(\3)                                   && Incohérence avec « \1 \2 » : “\3” est une forme verbale conjuguée.

TEST: {{de le}} vin                                           ->> du
TEST: il n’est pas interdit de le {{pensait}}
TEST: que connais-tu de “Le Tambour” ?

................................................................................
        <<- /conf/ not value(<1, "|oh|ah|") and not after("^ +et là")
        ->> ça                                          && Confusion : “çà” ne s’emploie plus guère que dans l’expression “çà et là”.|https://fr.wiktionary.org/wiki/%C3%A7%C3%A0

    sa  [<end>|,|)]
        <<- /conf/ \1 != "SA" -1>> ça                   && Confusion probable : “sa” est un déterminant féminin singulier. Pour l’équivalent de “cela” ou “ceci”, écrivez “ça”.

    [c’|ç’] [à|a]
        <<- /conf/ space(\1, 0, 0) and not (value(\2, "|a|") and value(>1, "|été|")) >>>
        <<- /conf/ value(>1, "|été|") -2>> a            && Confusion. Pour le verbe avoir à la 3ᵉ personne du singulier, écrivez “a”.
        <<- /conf/ __else__ ->> ça|sa                   && Confusion. Si vous voulez dire “cela”, écrivez “ça”. Pour le déterminant possessif, écrivez “sa”.

    ça et là
        <<- /conf/ not morph(<1, ":R") ->> çà et là     && Confusion : “ça” équivaut à “cela”. Dans l’expression “çà et là”, le terme “çà” signifie “ici”.

TEST: Je prends {{sa}}…
................................................................................
    [<start>|,|/_start_] ?l’¿ ont t’
        <<- /conf/ not value(>1, "|il|ils|elle|elles|iel|iels|") --2>> on    && Confusion probable : le mot “ont” est une conjugaison du verbe avoir.

    ~-ont$
        <<- /conf/ ->> =\1[:-1]                                     && Incohérence : le mot “ont” est une forme conjuguée du verbe “avoir” (par exemple : “ils ont”). Pour le pronom, écrivez “on”.

    [<start>|,|(]  *WORD  ont
        <<- /conf/ space(\2, 1, 1) and not value(\2, "|soit|") and morph(\2, ":3s") and not (tag(\-1, "eg1mot") and morph(\2, ">écrire/"))
        -2:3>> \2-on            && Confusion probable : le mot “ont” est une forme conjuguée du verbe “avoir”. Pour le pronom, écrivez “on” et mettez un trait d’union puisqu’il s’agit d’une question.

TEST: il m’assure qu’{{ont}} ne sait pas s’y prendre
TEST: {{ont}} m’assure qu’il n’y en a pas.
TEST: {{Ont}} n’arrive pas à s’en sortir.
TEST: {{Ont}} ne sait jamais quoi faire
TEST: si {{ont}} donne à ces gens, ça n’en finit plus.
................................................................................
        <<- ~2>> *

    Amérique du [Nord|Sud]
    Amérique centrale
        <<- ~2:0>> *

    @:M[12]  *WORD
        <<- \2.istitle() and space(\1, 1, 1) or re.search("^[MDCLXVI]+$", \2) ~2:0>> *

    @:M[12]  [Ier|Iᵉʳ]
        <<- \2.istitle() ~2:0>> *

    @:M[12]  [Le|La|von|van|Mac|Mc|De|Du|D’]  *WORD
        <<- \3.istitle() ~2:0>> *

................................................................................
    [>lieue|lieus] [>aménager|>abandonner|>insolite|>éloigner|>réserver|>sacrer|>connaître|>méconnaître|>privilégier|>priver]
        <<- /conf/ morph(\2, ":Q") -1>> lieu|lieux              && Confusion probable. Pour désigner un endroit, écrivez “lieu(x)”.|https://fr.wiktionary.org/wiki/lieu

    [>être|>demeurer|>déménager|>habiter|>trouver|>situer|>rester|>demeurer|>demeure|>vivre]  à  [quelques|plusieurs|maintes|*NUM|$:B:e:p]  [lieux|lieus]
        <<- /conf/ --1>> lieues                                 && Confusion probable. Pour désigner une distance, écrivez “lieues”.|https://fr.wiktionary.org/wiki/lieue

    [>être|>demeurer|>déménager|>habiter|>trouver|>situer|>rester|>demeurer|>demeure|>vivre]  à  des  [lieux|lieus]
        <<- /conf/ space(\2, 1, 4) --1>> lieues           && Confusion probable. Pour désigner une distance, écrivez “lieues”.|https://fr.wiktionary.org/wiki/lieue

    *NUM >lieu sous [la|les] >mer
    $:B:e:p  >lieu sous [la|les] >mer
        <<- /conf/ -2>> lieues                                  && Confusion. Pour désigner une distance, écrivez “lieue”.|https://fr.wiktionary.org/wiki/lieue

    [lieux|>lieue] [>jaune|>noir|>mordre]
        <<- /conf/ -1>> lieu|lieus                              && Confusion probable. Si vous parlez du poisson, écrivez “lieu” ou, au pluriel, “lieus”.|https://fr.wiktionary.org/wiki/lieu
................................................................................
TEST: Elle voulut expier ses {{pêchés}}.                                    ->> péchés
TEST: il {{péchait}} à la ligne                                             ->> pêchait


# peu / peux / peut
__conf_peut_peux_peu2__
    [peux|peut]  [de|d’]  @:[NA]¬*
        <<- /conf/ not value(<1, "|je|tu|il|elle|on|ne|n’|") and space(\1, 1, 3) -1>> peu     && Confusion probable : “\1” est une forme conjuguée de “pouvoir”, écrivez “peu” pour dire “pas beaucoup”.

TEST: {{peut}} d’hommes savent comment s’y prendre
TEST: peu d’argent
TEST: il peut de façon crédible avancer qu’il veut tout faire sauter


__conf_det_1subst_peu_peut_vinfi__
................................................................................

TEST: c’est tout le système qui {{peu}} vaciller            ->> peut


# peut-être / peut être
__conf_peut_être2__
    *WORD peut être
        <<- /conf/ space(\2, 1, 1) and morph(\1, ":V", ":[NAQGM]") -2:3>> peut-être           && Confusion probable. Pour dire “possiblement”, écrivez “peut-être”.

    <start> peut être
        <<- /conf/ space(\2, 1, 1) -2:3>> peut-être                                           && Confusion probable. Pour dire “possiblement”, écrivez “peut-être”.

TEST: {{Peut être}} qu’on en saura plus demain.
TEST: Ils vont {{peut être}} enfin faire quelque chose de leur misérable existence.
TEST: L’un peut être réglé immédiatement
TEST: Réussir peut parfois être la pire chose possible.
TEST: Peut vraiment être violent en cas d’humiliation.
TEST: « Oui, sans doute », mais peut-être pas pour tout le monde
................................................................................
TEST: tu n’as {{cas}} prendre le train


# quand même / comme même
__conf_quand_même__
    comme même [<end>|,|)]
    comme même @:(?:Os|C)
        <<- /conf/ space(\1, 1, 1) -1:2>> quand même      && Confusion probable.|https://fr.wiktionary.org/wiki/quand_m%C3%AAme

TEST: {{comme même}} il y va fort, le saligaud !
TEST: La météo disait qu’il ferait beau temps, mais il pleut {{comme même}}…


# quoi qu’il en soit
__conf_quoi_qu_il_en_soit__
................................................................................
TEST: il en faut trois minimum, cinq maximum
TEST: il vit dans un vingt-quatre mètre carré.
TEST: Cent quarante-neuvième épisode


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

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

    *NUM  *WORD  *WORD
        <<- /gn/ not value(\2, "|maximum|minimum|fois|multiplié|divisé|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|")
            and not re.search("^0*[01](?:,[0-9]+|)$", \1) and not morph(<1, ">(?:et|ou)/|:(?:N|D.*:[si])") and not morph(\3, ">(?:seul|maximum|minimum)/|:(?:[BG]|V0)") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
................................................................................
!!

#### Infinitif après “à”

__infi_à_verbe__
    à  le            ~..(?:ée?s?|ez|ai[st]?)$
    à  les           ~..(?:ée?s?|ez|ai[st]?)$
        <<- /infi/ \-1.islower() and space(\1, 1, 1) and morph(\-1, ":V", ":[YM]" )
        --1>> =suggVerbInfi(\-1)                                                                    && Erreur probable. Après le pronom “à”, le verbe devrait être à l’infinitif.

    à  [la|l’|leur]  ~..(?:ée?s?|ez|ai[st]?)$
        <<- /infi/ \-1.islower() and morph(\-1, ":V", ":[NYM]" ) --1>> =suggVerbInfi(\-1)           && Erreur probable. Après le pronom “à”, le verbe devrait être à l’infinitif.

    [<start>|,|(]  à  [nous|vous|lui]  ~..(?:ée?s?|ez|ai[st]?)$
        <<- /infi/ \-1.islower() and morph(\-1, ":V", ":[YEM]") --1>> =suggVerbInfi(\-1)            && Erreur probable. Après le pronom “à”, le verbe devrait être à l’infinitif.
................................................................................

TEST: rien à faire sinon {{expliqué}} ce qu’il faisait là           ->> expliquer
TEST: rien d’autre à faire que lui {{donnait}} à manger             ->> donner


__infi_nous_vous_verbe__
    [nous|vous]  ~ée?s?$
        <<- /infi/ space(\1, 1, 3) and morph(\2, ":Q") and not morph(<1, "V0.*[12]p") -2>> _  && Après “\1”, le verbe ne devrait pas être un participe passé.

TEST: oui, pourquoi pas, puisque nous {{intéressé}} à la question ne suffit pas à faire de nous des experts.
TEST: il faut croire que vous {{mangé}} ne nous nourrirait guère
TEST: Sommes-nous désespérés à ce point ?
TEST: Vous d’habitude si réservée.


................................................................................
!!!! Infinitif: conjonction +sujet +à +Vinfi                                                      !!

__conf_conjonction_sujet_à_vinfi__
    [lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  $:M  à  @:V1.*:Y  [<end>|)]
    [lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  $:M  à  @:V1.*:Y  , [je|tu|il|elle|iel|on|c’|nous|vous|ils|elles|iels]
        <<- /conf/ space(\3, 1, 1) -3:4>> ="a "+suggVerbPpas(\4, ":m:s")
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \4 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __else__ -3>> a
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \4 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __also__ -4>> =suggVerbPpas(\4, ":m:s")
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \4 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».

    [<start>|,|dont|que|qu’|lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  $:M  [lui|nous|vous]  à  @:V1.*:Y
        <<- /conf/ space(\4, 1, 1) -4:5>> ="a "+suggVerbPpas(\5, ":m:s")
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __else__ -4>> a
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __also__ -5>> =suggVerbPpas(\5, ":m:s")
        && Confusion probable. Si « \2 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».

    [lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  @:D.*:s  @:[NA].*:[si]  à  @:V1.*:Y  [<end>|)]
    [lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  @:D.*:s  @:[NA].*:[si]  à  @:V1.*:Y  , [je|tu|il|elle|iel|on|c’|nous|vous|ils|elles|iels]
        <<- /conf/ space(\4, 1, 1) -4:5>> ="a "+suggVerbPpas(\5, ":m:s")
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __else__ -4>> a
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __also__ -5>> =suggVerbPpas(\5, ":m:s")
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \5 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».

    [<start>|,|dont|que|qu’|lorsque|lorsqu’|puisque|puisqu’|quoique|quoiqu’|quand|auquel|auxquels|auxquelles|lequel|laquelle|lesquels|lesquelles|duquel|desquels|desquelles]
        ||  @:D.*:s  @:[NA].*:[si]  [lui|nous|vous]  à  @:V1.*:Y
        <<- /conf/ space(\5, 1, 1) -5:6>> ="a "+suggVerbPpas(\6, ":m:s")
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \6 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __else__ -5>> a
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \6 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».
        <<- /conf/ __also__ -6>> =suggVerbPpas(\6, ":m:s")
        && Confusion probable. Si « \2 \3 » est bien le sujet de l’action « \6 », vous confondez la préposition « à » avec « a » (forme conjuguée de « avoir ») et l’infinitif avec le participe passé (avec lesquels écrire un passé composé). Exemple : « il a réparé l’une des machines à réparer ».

TEST: quand Maria {{à parler}}, il a fallu ronger son frein                                 ->> a parlé
................................................................................
!!!! Impératif !                                                                                  !!
!!
!!

# Confusions
__imp_confusion_2e_pers_pluriel__
    [<start>|,|(]  *WORD  moi
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

    [<start>|,|(]  *WORD  la  *WORD
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)") and morph(\4, ":[ORC]", ":[NA]|>plupart/")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

    [<start>|,|(]  *WORD  [le|les|leur]  *WORD
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)") and morph(\4, ":[ORC]", ":[NA]")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

    [<start>|,|(]  *WORD  [lui|nous|vous]  *WORD
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)") and morph(\4, ":[ORCD]", ":Y")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

    [<start>|,|(|et|ou]  *WORD  [les|le|la|lui|nous|vous|leur]  [<end>|,|)]
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)")
        -2:3>> =suggVerbTense(\2, ":E", ":2p") + "-" + \3                                           && Confusion probable. Pour l’impératif, écrivez :

TEST: {{Donner moi}} une chance                         ->> Donnez-moi
TEST: {{donner la}} et oublie-moi.                      ->> donnez-la|||là
TEST: {{prenait les}} ou volez-les                      ->> prenez-les
TEST: je vous en prie, {{prenais moi}} avec vous.       ->> prenez-moi
TEST: {{avançait moi}} de l’argent                      ->> avancez-moi
................................................................................
!!
!!!! Impératif : traits d’union manquants                                                         !!
!!
!!

__imp_union_moi__
    *WORD  moi
        <<- /imp/ space(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)/") and not value(<1, "|de|d’|le|la|les|l’|je|j’|me|m’|te|t’|se|s’|nous|vous|lui|leur|")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  moi
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-moi"   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Apporte moi}} ce dictionnaire.                                      ->> Apporte-moi
TEST: {{Apportez moi}} ce dictionnaire
TEST: tu me dois bien ça, {{Achèves moi}}, je t’en prie.
TEST: explique ça mieux, {{Définit moi}} ça en termes intelligibles.
TEST: Viens moi je m’ennuie.
TEST: je suis moi et tu es toi.


__imp_union_toi__
    *WORD  toi
        <<- /imp/ space(\1, 1, 1)
            and morph(\1, ":E:2s", ":[GM]|>(?:venir|aller|partir)/") and not value(<1, "|de|d’|le|la|les|l’|me|m’|te|t’|se|s’|nous|vous|lui|leur|")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  toi
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-toi"   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Donne toi}} du temps.
TEST: j’en ai marre, {{instruit toi}} avant de parler.


__imp_union_nous_vous_lui__
    *WORD  [nous|vous|lui]
        <<- /imp/ space(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)/") and morph(>1, ":|<end>", ":(?:Y|3[sp]|Oo)|>(?:en|y)/") and morph(<1, ":Cc|<start>|>,")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  [nous|vous|lui]
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/") and not morph(>1, ":Y")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-"+\3   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Donne nous}} du café.
TEST: si ça se peut, {{apprend nous}} à réussir.
TEST: Ce que Jeanne, femme de Patrick, veut vous dire de sa vie.


__imp_union_y__
    *WORD  y
        <<- /imp/ space(\1, 1, 1)
            and morph(\1, ":E", ":[GM]") and morph(>1, ":|<end>", ":(?:Y|3[sp]|Oo)|>en/") and morph(<1, ":Cc|<start>|>,")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Donne y}} du tien.


__imp_union_les__
    *WORD  les
        <<- /imp/ space(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)") and morph(>1, ":|<end>|>,", ":(?:N|A|Y|B|3[sp])|>(?:pour|plus|moins|mieux|peu|trop|très|en|y)/") and morph(<1, ":Cc|<start>|>,")
        ->> \1-les                                      && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  les
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
            and morph(>1, ":|<end>|>,", ":(?:N|A|Y|B|3[sp])|>(?:pour|plus|moins|mieux|peu|trop|très|en|y)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-les"   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{chante les}} avec conviction
TEST: tu dois finir, {{finit les}}.
TEST: Veut les en convaincre.
TEST: Invite les plus intelligents…
................................................................................
TEST: Prenez les 5 ou 6 revues les plus connues.
TEST: Allez les chercher.
TEST: Soyez les plus gentils qu’on puisse imaginer.


__imp_union_le_la_leur__
    *WORD  [le|la|leur]
        <<- /imp/ space(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:venir|aller|partir)/") and morph(>1, ":|<end>|>,", ":(?:N|A|Q|Y|MP|H|T)|>(?:pour|plus|moins|mieux|peu|plupart|trop|très|en|y|une?|leur|lui)/")
            and morph(<1, ":Cc|<start>|>,")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  [le|la|leur]
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
            and morph(>1, ":|<end>|>,", ":(?:N|A|Y|B|T|MP|3[sp])|>(?:pour|plus|moins|mieux|peu|plupart|trop|très|en|y|une?|leur|lui)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-"+\3   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Prends le}} avec toi.
TEST: {{Dites leur}} que nous sommes là.
TEST: c’est ça, {{apprend le}} parce que c’est compliqué.
TEST: {{pardonne leur}}, ils ne savent pas ce qu’ils font
................................................................................
TEST: Daignez le lui permettre
TEST: Daignez la leur donner



__imp_union_en__
    *WORD  en
        <<- /imp/ space(\1, 1, 1)
            and morph(\1, ":E", ":[GM]|>(?:aller|partir)/") and morph(>1, ":|<end>|>,", ":(?:N|A|Q|Y|M|P|B|H|T|D|Ov)|>(?:plus|moins|mieux|peu|trop|très|une?)/") and morph(<1, ":Cc|<start>|>,")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [<start>|,|(]  *WORD  en
        <<- /imp/ space(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:aller|partir)/")
            and morph(>1, ":|<end>|>,", ":(?:N|A|Y|M|P|B|3[sp]|D|Ov)|>(?:plus|moins|mieux|peu|trop|très|une?)/")
        -2:3>> =suggVerbTense(\2, ":E", ":2s")+"-"+\3   && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{restons en}} là.
TEST: tu crois ça, {{donnes en}} encore
TEST: {{Venons en}} à des exemples précis
TEST: Intercède en ma faveur
................................................................................
TEST: Reviens en en apportant plus encore.
TEST: Schématisons en deux positions possibles.
TEST: Finis en ne comptant que sur toi-même


__imp_laisser_le_la_les_infi__
    [laisse|laissons|laissez]  [le|la|les]  *WORD
        <<- /imp/ space(\1, 1, 1) and morph(\3, ":(?:Y|Ov)", ":[NAB]") and not morph(<1, ":O[sv]")
        -1:2>> \1-\2                                    && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Laisse les}} entrer…
TEST: {{Laissez la}} venir…
TEST: {{laisse le}} faire
TEST: Laisse les chiens tranquilles
TEST: Laissez la peste leur pourrir la vie encore quelque temps.
................................................................................

TEST: {{accorde-t-en}} plus.
TEST: {{t-en}} lasser, impossible


__imp_union_m_t_en_y__
    *WORD  [m’|t’]  [en|y]
        <<- /imp/ space(\1, 1, 1) and morph(\1, ":E", ":[MG]") and morph(>1, ":|<end>|>,", ":(?:Y|[123][sp])")
        ->> \1-\2\3                                     && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{donne m’en}}, s’il te plaît.
TEST: Mélanie t’en donne souvent.


__imp_union_verbe_pronom_moi_toi_lui__
    [/-le|/-la|/-les]  [moi|toi]
        <<- /imp/ space(\1, 1, 1) and morphVC(\1, ":E")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: les analyses, {{donne-les moi}}
TEST: {{Donne-les lui}}.


__imp_union_verbe_pronom_nous_vous__
    [/-le|/-la|/-les]  [nous|vous|lui|leur]
        <<- /imp/ space(\1, 1, 1) and morphVC(\1, ":E") and morph(>1, ":[RC]|<end>|>,", ":Y")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{apporte-les nous}}


__imp_union_verbe_pronom_en_y_leur__
    [/-moi|/toi] en
        <<- /imp/ space(\1, 1, 1) and morphVC(\1, ":E") and morph(>1, ":[RC]|<end>|>,", ":[NAY]")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

    [/-lui|/-nous|/-vous|/-leur]  [en|y]
        <<- /imp/ space(\1, 1, 1) and morphVC(\1, ":E") and morph(>1, ":[RC]|<end>|>,", ":[NAY]")
        ->> \1-\2                                       && S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{donnez-moi en}}
TEST: {{prends-leur en}}
TEST: {{Donnez-nous en}}.
TEST: Alors, {{parais y}} grande et lumineuse.


__imp_union_aller_y!5__
    [viens|venez|venons|allons|allez] y
        <<- /imp/ space(\1, 1, 1) and not morph(>1, ":Y") ->> \1-\2           && Il manque un trait d’union.

    [va|vas] [y|z-y|z’y]
        <<- /imp/ space(\1, 1, 1) and not value(<1, "|tu|il|elle|on|ne|n’|") and not morph(>1, ":Y")
        ->> vas-y                                                                   && Il manque un trait d’union.

TEST: {{allons y}}
TEST: {{vas y}}
TEST: {{Viens y}}.
TEST: Il va y àvoir des contingents étrangers qui débarquent à Paris. (erroné)
TEST: Viens y faire un test.



__imp_union_convenir_en__
    [conviens|convenez|convenons] en
        <<- /imp/ space(\1, 1, 1) and not value(>1, "|partie|") ->> \1-\2     && Il manque un trait d’union.


TEST: c’est une belle affaire malgré son prix élevé, {{convenez en}}…


# Autres tests
TEST: Ne rien céder.
................................................................................
!!!! Traits d’union manquants (formes interrogatives)                                             !!
!!
!!

__inte_union_je!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..[éèe]$  je  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..[éèe]$  je  @:¬:1s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1[sŝś]", ":[GW]")
        -2:3>> =\2[:-1]+"é-je"                                                                      && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~..[éèe]$  je  [<end>|,|)]
    *WORD  ~..[éèe]$  je  @:¬:1s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1[sŝś]", ":[GNW]") and not value(\1, "|je|j’|il|elle|")
        -2:3>> =\2[:-1]+"é-je"                                                                      && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[is]$  je  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[is]$  je  @:¬:1s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1s", ":[GW]")
        -2:3>> \2-je                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [ai|avais|eus|eussé|eusse|aurai|aurais|suis|étais|fus|fussé|fusse|serai|serais]  je
        <<- /inte/ space(\2, 1, 1)
        -2:3>> \2-je                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~.[is]$  je  [<end>|,|)]
    *WORD  ~.[is]$  je  @:¬:1s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1s", ":[GNW]") and not value(\1, "|je|j’|tu|")
        -2:3>> \2-je                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: quel animal {{dessine je}}
TEST: {{mangé je}} {{ça}} avec dégoût ?
TEST: {{viendrais je}} à la fête ?
TEST: {{ai je}} enfin trouvé la réponse à mes questions ?
TEST: quel amour {{connaîtrai je}} si je juge sans cesse ?


__inte_union_tu!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[sx]$  tu  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[sx]$  tu  @:¬:2s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:2s", ":[GW]")
        -2:3>> \2-tu                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [as|avais|eus|eusses|es|auras|aurais|étais|fus|fusses|seras|serais]  tu
        <<- /inte/ space(\2, 1, 1)
        -2:3>> \2-tu                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~.s$  tu  [<end>|,|)]
    *WORD  ~.s$  tu  @:¬:2s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:2s", ":[GNW]") and not value(\1, "|je|j’|tu|")
        -2:3>> \2-tu                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{Viendras tu}} là ?
TEST: et toi, {{as tu}} découvert le secret de l’immortalité ?
TEST: quelle vie {{connaitras tu}} ?
TEST: Comment {{peux tu}} ?


__inte_union_il_on!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[td]$  [il|on]  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[td]$  [il|on]  @:¬:3s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GW]")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [avait|eut|eût|est|aurait|était|fut|fût|serait]   [il|on]
        <<- /inte/ space(\2, 1, 1)
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~.[td]$  [il|on]  [<end>|,|)]
    *WORD  ~.[td]$  [il|on]  @:¬:3s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GNW]") and not value(\1, "|ce|il|elle|on|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{prend on}} le temps d’y réfléchir ?
TEST: De quel droit {{vient il}} m’{{ennuyer}} ?
TEST: comment {{était il}}
TEST: Pourquoi le message de Jean {{était il}} très radical pour son époque ?
TEST: Pourquoi le message de Jean était‐il très radical pour son époque ? (Hyphen U+2010)


__inte_union_ce!7__
    [<start>|,|(] [est|était|étaient] ce ?pas¿ [le|la|les|l’|un|une|de|des|d’|ce|cet|cette|ces|quelques|plusieurs|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs]
    [<start>|,|(] [est|était|étaient] ce ?pas¿ @:G¬:[NA].*:[me]:[si]|>(?:qu[ei’]|pourquoi|dont)/
    [<start>|,|(] [est|était|étaient] ce [ton|son] @:N¬:A.*:[me]:[si]
        <<- /inte/ space(\2, 1, 1) -2:3>> \2-\3                                               && Forme interrogative ? Mettez un trait d’union.

TEST: N’{{était ce}} pas le bon moment pour y songer.                   ->> était-ce
TEST: Qu’était ce raffut ?
TEST: Cette liberté, formalisée par le libéralisme économique, dès les Physiocrates (vers 1750), est ce dont le despotisme économique a besoin pour que son soubassement économique fonctionne mécaniquement.


__inte_union_elle_iel!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[td]$  [elle|iel]  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~.[td]$  [elle|iel]  @:¬:3s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GW]")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [avait|eut|eût|aurait|est|était|fut|fût|serait]   [elle|iel]
        <<- /inte/ space(\2, 1, 1)
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~.[td]$  [elle|iel]  [<end>|,|)]
    *WORD  ~.[td]$  [elle|iel]  @:¬:3s
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GNW]") and not value(\1, "|ce|c’|ça|ç’|il|elle|on|iel|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{vient elle}} souvent ?
TEST: comment {{sait elle}}
TEST: qui {{était elle}} ?
TEST: quel travail {{avait elle}} accompli ?
TEST: {{sait iel}} comment faire ?
................................................................................
TEST: je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça.
TEST: C’était elle qui avait pris le contrôle.


__inte_union_nous2!7__
    ,  ~ons$  nous  [<end>|,|)]
    ,  ~ons$  nous  @:¬:(?:1p|Y)
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    <start>  ~ons  nous
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|allons|venons|partons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons  nous
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [sommes|étions|fûmes|fussions|serons|serions|avons|avions|eûmes|eussions|aurons|aurions]  nous
        <<- /inte/ space(\2, 1, 1)
        -2:3>> \2-nous                                                                              && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~ons$  nous  [<end>|,|)]
    *WORD  ~ons$  nous  @:¬:(?:Y|1p)
        <<- /inte/ space(\2, 1, 1) and
            ( (value(\2, "|avions|") and not morph(\1, ":A.*:[me]:[sp]") and not morph(\-1, ":(:?3[sp]|Ov)"))
            or (morph(\2, ":V.*:1p", ":[GNW]") and not morph(\1, ":Os")) )
        -2:3>> \2-nous                                                                              && Forme interrogative ? Mettez un trait d’union.

TEST: Ils savent, réellement {{croyons nous}}, comment résoudre le problème, mais ils n’ont fait que de la merde.
TEST: y {{retrouverons nous}} enfin la tranquilité ?
TEST: comment alors {{irons nous}} à la pêche ?
................................................................................
TEST: pourquoi {{entendons nous}} souvent ces injonctions idiotes ?
TEST: les avions nous font rêver.


__inte_union_vous2!7__
    ,  ~ez$  vous  [<end>|,|)]
    ,  ~ez$  vous  @:¬:(?:2p|Y)
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    <start>  ~ez$  vous
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|allez|venez|partez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ez$  vous
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [êtes|étiez|fûtes|fussiez|serez|seriez|avez|aviez|eûtes|eussiez|aurez|auriez]  vous
        <<- /inte/ space(\2, 1, 1)
        -2:3>> \2-vous                                                                              && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~..e[zs]$  vous  [<end>|,|)]
    *WORD  ~..e[zs]$  vous  @:¬:(?:Y|2p)
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GNW]") and not value(\2, "|veuillez|") and not morph(\1, ":Os")
        -2:3>> \2-vous                                                                              && Forme interrogative ? Mettez un trait d’union.

TEST: ils seront, me {{direz vous}}, étroitement surveillés, mais rien ne le garantit.
TEST: Mais {{soutiendrez vous}} cette proposition ?
TEST: pourquoi ailleurs {{soutenez vous}} ces gens-là ?
TEST: comment {{êtes vous}} arrivées là ?
TEST: quel genre de femme {{voulez vous}} réellement ?
................................................................................
TEST: quel homme {{voulez vous}} qu’il devienne
TEST: Veuillez vous instruire avant de contester ces mesures.


__inte_union_ils!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  @:¬:3p
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GW]")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [ont|avaient|eurent|eussent|auront|auraient|sont|étaient|furent|fussent|seront|seraient]  ils
        <<- /inte/ space(\2, 1, 1)
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~[eo]nt$  ils  [<end>|,|)]
    *WORD  ~[eo]nt$  ils  @:¬:3p
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GNW]") and not value(\1, "|ce|ils|elles|iels|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{Viendront ils}} demain ?
TEST: qui {{seront ils}} une fois adultes ?
TEST: dans quel retaurant {{iront ils}} ?


__inte_union_elles_iels!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  [elles|iels]  [<end>|,|)]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  [elles|iels]  @:¬:3p
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GW]")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [ont|avaient|eurent|eussent|auront|auraient|sont|étaient|furent|fussent|seront|seraient]  [elles|iels]
        <<- /inte/ space(\2, 1, 1)
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

    *WORD  ~[eo]nt$  [elles|iels]  [<end>|,|)]
    *WORD  ~[eo]nt$  [elles|iels]  @:¬:3p
        <<- /inte/ space(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GNW]") and not value(\1, "|ce|ils|elles|iels|")
        -2:3>> \2-\3                                                                                && Forme interrogative ? Mettez un trait d’union.

TEST: {{viennent elles}} souvent ?
TEST: quand {{furent elles}} recrutées ?
TEST: quels éléments {{examinèrent elles}} ?
TEST: {{connaissent iels}} leurs droits ?

................................................................................
__conj_beaucoup__
    beaucoup    @:V¬:(?:P|Q|G|Y)
        <<- /conj/ not morph(<1, ":[VR]") >>>
        <<- /conj/ tag(\1, "_bcp_plur_") and not morph(\2, ":3p")
        -2>> =suggVerb(\2, ":3p")                                   && Conjugaison erronée. Accord avec “\1”. Le substantif suivant étant au pluriel, le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and tag(\1, "_bcp_sing_") and not morph(\2, ":3s")
        -2>> =suggVerb(\2, ":3s")                                   && Conjugaison erronée. Accord avec “\1”. Le substantif suivant étant au singulier, le verbe devrait être à la 3ᵉ personne du singulier.
        <<- /conj/ __else__ and \2 != "a" and not tag(\1, "_bcp_sing_") and not morph(\2, ":3p") and not (space(\1, 1, 2) and morph(\2, ":V0"))
        -2>> =suggVerb(\2, ":3p")                                   && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    beaucoup    qui  @:V¬:(?:3p|P|G)
        <<- /conj/ -3>> =suggVerb(\3, ":3p")                        && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: beaucoup {{vienne}}
TEST: Beaucoup d’hommes y {{était}}.
................................................................................
!!
!!

# Règles casse-gueule, prudence…

__conj_nom_propre_virgule__
    <start>  $:M  ,  @:3s¬:[NAGEM]  [<end>|,|)]
        <<- /conj/ space(\2, 0, 0) -2:3>> \2
        && Si “\2” est le sujet de “\4”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\4” devrait être à l’impératif (à moins d’une inversion verbe-sujet).
        <<- /conj/ __also__ -4>> =suggVerbTense(\4, ":E", ":2s")
        && Si “\2” est le sujet de “\4”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\4” devrait être à l’impératif (à moins d’une inversion verbe-sujet).

    <start>  $:M  ,  @:3s¬:[NAGEM]  @:A.*:[si]
        <<- /conj/ space(\2, 0, 0) and morph(\4, ">(?:être|devenir|redevenir|sembler|para[iî]tre)/") -2:3>> \2
        && Si “\2” est le sujet de “\4”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\4” devrait être à l’impératif (à moins d’une inversion verbe-sujet).
        <<- /conj/ __also__ -4>> =suggVerbTense(\4, ":E", ":2s")
        && Si “\2” est le sujet de “\4”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\4” devrait être à l’impératif (à moins d’une inversion verbe-sujet).

TEST: {{Paul,}} {{vient}}                                               ->> Paul|||viens
TEST: {{Anton,}} {{sera}} toujours prêt à vous écouter                  ->> Anton|||sois
TEST: Maria, avance devant toi.
TEST: Céline, crut deviner son époux, en avait assez.
TEST: Valérie, devina Éric, n’avait pas du tout l’intention de mener à bien la tâche qu’il voulait la voir accomplir.


__conj_det_nom_sing_virgule__
    <start>  [un|le|la|l’|ce|cet|cette|mon|ton|son|ma|ta|sa]  @:[NA]  ,  @:3s¬:[NAGEM]  [<end>|,|les|des|ces|mes|tes|ses|nos|vos|leurs]
        <<- /conj/ space(\3, 0, 0) -3:4>> \3
        && Si “\2 \3” est le sujet de “\5”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\5” devrait être à l’impératif (à moins d’une inversion verbe-sujet).
        <<- /conj/ __also__ -5>> =suggVerbTense(\5, ":E", ":2s")
        && Si “\2 \3” est le sujet de “\5”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\5” devrait être à l’impératif (à moins d’une inversion verbe-sujet).

    <start>  [un|le|la|l’|ce|cet|cette|mon|ton|son|ma|ta|sa]  @:[NA]  ,  @:3s¬:[NAGEM]  @:A.*:[si]
        <<- /conj/ space(\3, 0, 0) and morph(\5, ">(?:être|devenir|redevenir|sembler|para[iî]tre)/")  -3:4>> \3
        && Si “\2 \3” est le sujet de “\5”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\5” devrait être à l’impératif (à moins d’une inversion verbe-sujet).
        <<- /conj/ __also__ -5>> =suggVerbTense(\5, ":E", ":2s")
        && Si “\2 \3” est le sujet de “\5”, la virgule est superflue (on ne sépare pas le verbe du sujet). Sinon “\5” devrait être à l’impératif (à moins d’une inversion verbe-sujet).

TEST: Ce {{soir,}} {{vient}}.                                           ->> soir|||viens
TEST: l’{{homme,}} {{devient}} difficile.                               ->> homme|||deviens
TEST: ce matin, viens me voir.
TEST: l’Angola, Cuba et l’Afrique du Sud signent à New York, sous l’égide des Soviétiques et des Américains, un accord aboutissant au retrait des troupes cubaines d’Angola.
TEST: L’amour, expliqua la femme.


__conj_det_nom_plur_virgule__
    <start>  [les|ces|mes|tes|ses|plusieurs|quelques|certains|certaines|maints|maintes]  @:[NA].*:[pi]  ,  @:3p¬:[NAGEM]  [<end>|,|)]
        <<- /conj/ space(\3, 0, 0)
        -3:4>> \3                                                               && La virgule est probablement superflue (on ne sépare pas le verbe du sujet).

    <start>  [les|ces|mes|tes|ses|plusieurs|quelques|certains|certaines|maints|maintes]  @:[NA].*:[pi]  ,  @:3p¬:[NAGEM]  @:A.*:[pi]
        <<- /conj/ space(\3, 0, 0) and morph(\5, ">(?:être|devenir|redevenir|sembler|para[iî]tre)/")
        -3:4>> \3                                                               && La virgule est probablement superflue (on ne sépare pas le verbe du sujet).

TEST: Ces {{imbéciles,}} se ridiculisent.                               ->> imbéciles
TEST: les {{hommes,}} deviennent de plus en plus arrogants.             ->> hommes
TEST: Les questions de faisabilité, de mise en pratique ont vraiment été abordées.
TEST: Ces difficultés, songèrent mes amis, allaient les mettre à la torture.

Modified misc/grammalecte.sublime-syntax from [08a130127a] to [9d23c91bd9].

56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
    # other.
    - match: '\b(?:if|else|and|or|not|in)\b'
      scope: keyword.python

    - match: '\b(?:True|False|None)\b'
      scope: constant.language

    - match: '\b(?:spell|morph(?:VC|)|stem|tag|value|space_after|textarea0?\w*|before0?\w*|after0?\w*|word|option|define(?:from|)|select|exclude|setmeta|analyse\w*|tag(?:after|before)|apposition|is[A-Z]\w+|agreement|rewrite|checkD\w+|getD\w+|has[A-Z]\w+|sugg[A-Z]\w+|switch[A-Z]\w+|ceOrCet|formatN\w+|mbUnit)\b'
      scope: entity.name.function

    - match: '\b(?:replace|endswith|startswith|search|upper|lower|capitalize|strip|rstrip|is(?:alpha|upper|lower|digit|title))\b'
      scope: support.function

    - match: '\becho\b'
      scope: support.function.debug







|







56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
    # other.
    - match: '\b(?:if|else|and|or|not|in)\b'
      scope: keyword.python

    - match: '\b(?:True|False|None)\b'
      scope: constant.language

    - match: '\b(?:spell|morph(?:VC|)|stem|tag|value|space|textarea0?\w*|before0?\w*|after0?\w*|word|option|define(?:from|)|select|exclude|setmeta|analyse\w*|tag(?:after|before)|apposition|is[A-Z]\w+|agreement|rewrite|checkD\w+|getD\w+|has[A-Z]\w+|sugg[A-Z]\w+|switch[A-Z]\w+|ceOrCet|formatN\w+|mbUnit)\b'
      scope: entity.name.function

    - match: '\b(?:replace|endswith|startswith|search|upper|lower|capitalize|strip|rstrip|is(?:alpha|upper|lower|digit|title))\b'
      scope: support.function

    - match: '\becho\b'
      scope: support.function.debug