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: trunk, fr, core, build, doc
2020-11-25
22:59
[build][core][fr][doc] rename functions check-in: b695f86d1e user: olr tags: trunk, fr, core, build, doc
22:37
[core][fr] rename functions check-in: 55b6bb4791 user: olr tags: trunk, fr, core, build
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
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"\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
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







-
+







-
+



-
+








`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])`
`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.

`tag_before(n, tag)`
`tagbefore(n, tag)`

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

`tag_after(n, tag)`
`tagafter(n, tag)`

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

### Functions for regex and token rules

`__also__`

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
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







-
+

-
+

-
+

-
+





-
+







-
-
+
+









-
+








>   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])`
`define(n, morph_list as string)`

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

`add_morph(n, [morph_list])`
`addmorph(n, morph_list as string)`

>   At reference n, add the listed morphologies (a list of strings).
>   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")
    =>> 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"])
    =>> 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()`.
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
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) {
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
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):
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
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







-
+


-
+


-
+



-
+


-
+


-
+







!!!
!!! Purge de la phrase                                                                            !!
!!!
!!!

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

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

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

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

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

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


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


1754
1755
1756
1757
1758
1759
1760
1761

1762
1763
1764
1765
1766
1767
1768

1769
1770
1771
1772
1773
1774
1775
1754
1755
1756
1757
1758
1759
1760

1761
1762
1763
1764
1765
1766
1767

1768
1769
1770
1771
1772
1773
1774
1775







-
+






-
+








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

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

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

    **  [  *WORD  ]  **
        <<- space_after(\1, 1, 3) and space_after(\-2, 1, 3) >>>
        <<- 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  }
1833
1834
1835
1836
1837
1838
1839
1840

1841
1842
1843
1844
1845
1846
1847
1833
1834
1835
1836
1837
1838
1839

1840
1841
1842
1843
1844
1845
1846
1847







-
+







        <<- /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)
        <<- /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

2655
2656
2657
2658
2659
2660
2661
2662

2663
2664
2665
2666
2667
2668
2669
2655
2656
2657
2658
2659
2660
2661

2662
2663
2664
2665
2666
2667
2668
2669







-
+








    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
        <<- 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__
2702
2703
2704
2705
2706
2707
2708
2709

2710
2711
2712

2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731

2732
2733
2734
2735
2736
2737
2738
2702
2703
2704
2705
2706
2707
2708

2709
2710
2711

2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730

2731
2732
2733
2734
2735
2736
2737
2738







-
+


-
+


















-
+








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

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

    *NUM  ~^h[0-9][0-9]$
        <<- space_after(\1, 0, 0) ~>> ␣
        <<- 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
        <<- ~>> ␣
        <<- =>> define(\1, ":LN:e:p")

TEST: mais nous avancions en terra incognita
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]")) ~>> ␣
        <<- 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
3551
3552
3553
3554
3555
3556
3557
3558

3559
3560
3561
3562
3563
3564
3565
3551
3552
3553
3554
3555
3556
3557

3558
3559
3560
3561
3562
3563
3564
3565







-
+







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 ?
        <<- /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__
4003
4004
4005
4006
4007
4008
4009
4010

4011
4012
4013
4014
4015
4016
4017
4003
4004
4005
4006
4007
4008
4009

4010
4011
4012
4013
4014
4015
4016
4017







-
+







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 ?
        <<- /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.

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
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







-
+



-
+


-
+


-
+







!!!! É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|;é")
        <<- /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_after(\1, 1, 1) -1:.2>> s’                         && Il faut élider “si” et l’accoler au pronom.|http://fr.wikipedia.org/wiki/Élision
        <<- /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_after(\1, 1, 1) -1:.2>> qu’                        && Il faut élider “que” et l’accoler au pronom.|http://fr.wikipedia.org/wiki/Élision
        <<- /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_after(\1, 1, 1) and morph(\2, ":V", ":Q|;é")
        <<- /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’
4907
4908
4909
4910
4911
4912
4913
4914

4915
4916
4917

4918
4919
4920
4921
4922
4923
4924
4907
4908
4909
4910
4911
4912
4913

4914
4915
4916

4917
4918
4919
4920
4921
4922
4923
4924







-
+


-
+







    *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.
        <<- /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_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.
        <<- /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}}
5085
5086
5087
5088
5089
5090
5091
5092

5093
5094
5095
5096
5097
5098
5099
5085
5086
5087
5088
5089
5090
5091

5092
5093
5094
5095
5096
5097
5098
5099







-
+








__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, "-", ":"))
        <<- /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__
5674
5675
5676
5677
5678
5679
5680
5681

5682
5683
5684
5685
5686
5687
5688
5674
5675
5676
5677
5678
5679
5680

5681
5682
5683
5684
5685
5686
5687
5688







-
+







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.
        <<- /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.

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
6011
6012
6013
6014
6015
6016
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
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
6011
6012
6013
6014
6015
6016
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







-
+




-
+



-
+



-
+




















-
+




-
+



-
+



-
+







!!!! 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_")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|allons|venons|partons|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        <<- /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 ?
TEST: ils sont, {{croyons nous}}, indéfendables
TEST: nous pensons alors vraiment, allons nous perdre dans les bois
TEST: Sachons nous conformer à ces restrictions et faisons notre travail.
TEST: allons nous détendre à la piscine.
TEST: partons nous détendre à la montagne
TEST: Nous ne pouvons nous contenter de parler


__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_")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|allez|venez|partez|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        <<- /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
6082
6083
6084
6085
6086
6087
6088
6089

6090
6091
6092
6093
6094
6095
6096
6082
6083
6084
6085
6086
6087
6088

6089
6090
6091
6092
6093
6094
6095
6096







-
+







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.
        <<- /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                                        !!

7588
7589
7590
7591
7592
7593
7594
7595

7596
7597
7598
7599
7600
7601
7602
7588
7589
7590
7591
7592
7593
7594

7595
7596
7597
7598
7599
7600
7601
7602







-
+







    [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()
        <<- /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” ?

9188
9189
9190
9191
9192
9193
9194
9195

9196
9197
9198
9199
9200
9201
9202
9188
9189
9190
9191
9192
9193
9194

9195
9196
9197
9198
9199
9200
9201
9202







-
+







        <<- /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/ 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}}…
11182
11183
11184
11185
11186
11187
11188
11189

11190
11191
11192
11193
11194
11195
11196
11182
11183
11184
11185
11186
11187
11188

11189
11190
11191
11192
11193
11194
11195
11196







-
+







    [<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/"))
        <<- /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.
17895
17896
17897
17898
17899
17900
17901
17902

17903
17904
17905
17906
17907
17908
17909
17895
17896
17897
17898
17899
17900
17901

17902
17903
17904
17905
17906
17907
17908
17909







-
+







        <<- ~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>> *
        <<- \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>> *

20989
20990
20991
20992
20993
20994
20995
20996

20997
20998
20999
21000
21001
21002
21003
20989
20990
20991
20992
20993
20994
20995

20996
20997
20998
20999
21000
21001
21002
21003







-
+







    [>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
        <<- /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
21353
21354
21355
21356
21357
21358
21359
21360

21361
21362
21363
21364
21365
21366
21367
21353
21354
21355
21356
21357
21358
21359

21360
21361
21362
21363
21364
21365
21366
21367







-
+







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”.
        <<- /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__
21444
21445
21446
21447
21448
21449
21450
21451

21452
21453
21454

21455
21456
21457
21458
21459
21460
21461
21444
21445
21446
21447
21448
21449
21450

21451
21452
21453

21454
21455
21456
21457
21458
21459
21460
21461







-
+


-
+








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”.
        <<- /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_after(\2, 1, 1) -2:3>> peut-être                                           && Confusion probable. Pour dire “possiblement”, écrivez “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
21550
21551
21552
21553
21554
21555
21556
21557

21558
21559
21560
21561
21562
21563
21564
21550
21551
21552
21553
21554
21555
21556

21557
21558
21559
21560
21561
21562
21563
21564







-
+







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
        <<- /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__
23396
23397
23398
23399
23400
23401
23402
23403

23404
23405
23406
23407

23408
23409
23410
23411
23412
23413
23414
23396
23397
23398
23399
23400
23401
23402

23403
23404
23405
23406

23407
23408
23409
23410
23411
23412
23413
23414







-
+



-
+







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"))
        <<- /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_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)")
        <<- /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", "*")))
24800
24801
24802
24803
24804
24805
24806
24807

24808
24809
24810
24811
24812
24813
24814
24800
24801
24802
24803
24804
24805
24806

24807
24808
24809
24810
24811
24812
24813
24814







-
+







!!

#### 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]" )
        <<- /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.
25288
25289
25290
25291
25292
25293
25294
25295

25296
25297
25298
25299
25300
25301
25302
25288
25289
25290
25291
25292
25293
25294

25295
25296
25297
25298
25299
25300
25301
25302







-
+








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é.
        <<- /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.


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
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







-
+








-
+










-
+








-
+







!!!! 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")
        <<- /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_after(\4, 1, 1) -4:5>> ="a "+suggVerbPpas(\5, ":m:s")
        <<- /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_after(\4, 1, 1) -4:5>> ="a "+suggVerbPpas(\5, ":m:s")
        <<- /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_after(\5, 1, 1) -5:6>> ="a "+suggVerbPpas(\6, ":m:s")
        <<- /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é
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
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







-
+



-
+



-
+



-
+



-
+







!!!! 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)")
        <<- /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_after(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)") and morph(\4, ":[ORC]", ":[NA]|>plupart/")
        <<- /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_after(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)") and morph(\4, ":[ORC]", ":[NA]")
        <<- /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_after(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)") and morph(\4, ":[ORCD]", ":Y")
        <<- /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_after(\2, 1, 1) and morph(\2, ":(?:V1.*:[YQ]|Iq.*:[123]s)")
        <<- /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
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
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







-
+




-
+












-
+




-
+








-
+




-
+









-
+








-
+




-
+














-
+





-
+







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

__imp_union_moi__
    *WORD  moi
        <<- /imp/ space_after(\1, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
        <<- /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_after(\1, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
        <<- /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_after(\1, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/") and not morph(>1, ":Y")
        <<- /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_after(\1, 1, 1)
        <<- /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_after(\1, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
        <<- /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_after(\1, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:venir|aller|partir)/")
        <<- /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
29319
29320
29321
29322
29323
29324
29325
29326

29327
29328
29329
29330
29331

29332
29333
29334
29335
29336
29337
29338
29339
29340
29341
29342
29343
29344
29345
29346
29347
29348
29349
29350
29351

29352
29353
29354
29355
29356
29357
29358
29319
29320
29321
29322
29323
29324
29325

29326
29327
29328
29329
29330

29331
29332
29333
29334
29335
29336
29337
29338
29339
29340
29341
29342
29343
29344
29345
29346
29347
29348
29349
29350

29351
29352
29353
29354
29355
29356
29357
29358







-
+




-
+



















-
+







TEST: Daignez le lui permettre
TEST: Daignez la leur donner



__imp_union_en__
    *WORD  en
        <<- /imp/ space_after(\1, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V(?:1.*:Ip.*:2s|[23].*:Ip.*:3s)", ":[GM]|>(?:aller|partir)/")
        <<- /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: Même l’implacable guerrier-capitaine de la Fédération, James T. Kirk, apprend en rechignant à enterrer le phaser avec les bâtards Klingons qui ont tué son fils.
TEST: Terminons en réservant une place de choix à l’un des relais les plus fervents de la pensée
TEST: Le Souffle puisé à la Parole nous met en synergie avec le Père Qui souffre, souffre en nous sûrement de voir que Sa Parole déjà transmise autrefois peine à être accomplie.
TEST: Passe en me donnant la nausée.
TEST: Reviens en y consacrant plus de temps.
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]")
        <<- /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.
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
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







-
+








-
+








-
+







-
+



-
+










-
+


-
+












-
+








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])")
        <<- /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_after(\1, 1, 1) and morphVC(\1, ":E")
        <<- /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_after(\1, 1, 1) and morphVC(\1, ":E") and morph(>1, ":[RC]|<end>|>,", ":Y")
        <<- /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_after(\1, 1, 1) and morphVC(\1, ":E") and morph(>1, ":[RC]|<end>|>,", ":[NAY]")
        <<- /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_after(\1, 1, 1) and morphVC(\1, ":E") and morph(>1, ":[RC]|<end>|>,", ":[NAY]")
        <<- /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_after(\1, 1, 1) and not morph(>1, ":Y") ->> \1-\2           && Il manque un trait d’union.
        <<- /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_after(\1, 1, 1) and not value(<1, "|tu|il|elle|on|ne|n’|") and not morph(>1, ":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_after(\1, 1, 1) and not value(>1, "|partie|") ->> \1-\2     && Il manque un trait d’union.
        <<- /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.
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
30488
30489
30490
30491
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
30524
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
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
30488
30489
30490
30491
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
30524
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







-
+




-
+




-
+



-
+




-
+












-
+



-
+




-
+











-
+



-
+




-
+













-
+









-
+



-
+




-
+














-
+



-
+



-
+



-
+




-
+


















-
+



-
+



-
+



-
+




-
+















-
+



-
+




-
+










-
+



-
+




-
+







!!!! 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]")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:1[sŝś]", ":[GNW]") and not value(\1, "|je|j’|il|elle|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:1s", ":[GW]")
        <<- /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_after(\2, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:1s", ":[GNW]") and not value(\1, "|je|j’|tu|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:2s", ":[GW]")
        <<- /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_after(\2, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:2s", ":[GNW]") and not value(\1, "|je|j’|tu|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GW]")
        <<- /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_after(\2, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GNW]") and not value(\1, "|ce|il|elle|on|")
        <<- /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_after(\2, 1, 1) -2:3>> \2-\3                                               && Forme interrogative ? Mettez un trait d’union.
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GW]")
        <<- /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_after(\2, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:3s", ":[GNW]") and not value(\1, "|ce|c’|ça|ç’|il|elle|on|iel|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|allons|venons|partons|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        <<- /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_after(\2, 1, 1)
        <<- /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_after(\2, 1, 1) and
        <<- /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 {{sommes nous}} réellement des dieux ?
TEST: À quelle autorité {{prétendons nous}} sur ces gens…
TEST: quel exercice {{avions nous}} revu ?
TEST: À quelle autorité {{prétendons nous}} si…
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|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|allez|venez|partez|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        <<- /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_after(\2, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GNW]") and not value(\2, "|veuillez|") and not morph(\1, ":Os")
        <<- /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 exercice {{avions nous}} 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]")
        <<- /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_after(\2, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GNW]") and not value(\1, "|ce|ils|elles|iels|")
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GW]")
        <<- /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_after(\2, 1, 1)
        <<- /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_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GNW]") and not value(\1, "|ce|ils|elles|iels|")
        <<- /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 ?

31138
31139
31140
31141
31142
31143
31144
31145

31146
31147
31148
31149
31150
31151
31152
31138
31139
31140
31141
31142
31143
31144

31145
31146
31147
31148
31149
31150
31151
31152







-
+







__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"))
        <<- /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}}.
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
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







-
+





-
+













-
+





-
+













-
+



-
+







!!
!!

# Règles casse-gueule, prudence…

__conj_nom_propre_virgule__
    <start>  $:M  ,  @:3s¬:[NAGEM]  [<end>|,|)]
        <<- /conj/ space_after(\2, 0, 0) -2:3>> \2
        <<- /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_after(\2, 0, 0) and morph(\4, ">(?:être|devenir|redevenir|sembler|para[iî]tre)/") -2:3>> \2
        <<- /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_after(\3, 0, 0) -3:4>> \3
        <<- /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_after(\3, 0, 0) and morph(\5, ">(?:être|devenir|redevenir|sembler|para[iî]tre)/")  -3:4>> \3
        <<- /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_after(\3, 0, 0)
        <<- /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_after(\3, 0, 0) and morph(\5, ">(?:être|devenir|redevenir|sembler|para[iî]tre)/")
        <<- /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
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'
    - 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