Grammalecte  Check-in [33f4564f2f]

Overview
Comment:[build][fr] rename functions [fr] ajustements
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | build
Files: files | file ages | folders
SHA3-256: 33f4564f2ff0b11d38f0cd028c5784153c3816ad86ed63281a31ea76c2ae57f2
User & Date: olr on 2020-11-27 09:58:42
Other Links: manifest | tags
Context
2020-11-27
13:37
[fr] ajustements check-in: 4880a11e5e user: olr tags: fr, trunk
09:58
[build][fr] rename functions [fr] ajustements check-in: 33f4564f2f user: olr tags: build, fr, trunk
09:54
[core] suggVerbMode() update check-in: 03e53a9de3 user: olr tags: core, trunk
Changes

Modified compile_rules.py from [fc5d304819] to [ac30a9ef24].

54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91


def prepareFunction (s):
    "convert simple rule syntax to a string of Python code"
    s = s.replace("__also__", "bCondMemo")
    s = s.replace("__else__", "not bCondMemo")
    s = s.replace("sContext", "_sAppContext")
    s = re.sub(r"isStart *\(\)", 'before("^ *$|, *$")', s)
    s = re.sub(r"isRealStart *\(\)", 'before("^ *$")', s)
    s = re.sub(r"isStart0 *\(\)", 'before0("^ *$|, *$")', s)
    s = re.sub(r"isRealStart0 *\(\)", 'before0("^ *$")', s)
    s = re.sub(r"isEnd *\(\)", 'after("^ *$|^,")', s)
    s = re.sub(r"isRealEnd *\(\)", 'after("^ *$")', s)
    s = re.sub(r"isEnd0 *\(\)", 'after0("^ *$|^,")', s)
    s = re.sub(r"isRealEnd0 *\(\)", 'after0("^ *$")', s)
    s = re.sub(r"(select|exclude)[(][\\](\d+)", '\\1(dTokenPos, m.start(\\2), m.group(\\2)', s)
    s = re.sub(r"define[(][\\](\d+)", 'define(dTokenPos, m.start(\\1)', s)
    s = re.sub(r"(morph|info)[(][\\](\d+)", '\\1((m.start(\\2), m.group(\\2))', s)
    s = re.sub(r"(morph|info)[(]", '\\1(dTokenPos, ', s)
    s = re.sub(r"(sugg\w+|switch\w+)\(@", '\\1(m.group(i[4])', s)
    s = re.sub(r"word\(\s*1\b", 'nextword1(sSentence, m.end()', s)                                  # word(1)
    s = re.sub(r"word\(\s*-1\b", 'prevword1(sSentence, m.start()', s)                               # word(-1)
    s = re.sub(r"word\(\s*(\d)", 'nextword(sSentence, m.end(), \\1', s)                             # word(n)
    s = re.sub(r"word\(\s*-(\d)", 'prevword(sSentence, m.start(), \\1', s)                          # word(-n)
    s = re.sub(r"before\(\s*", 'look(sSentence[:m.start()], ', s)                                   # before(sSentence)
    s = re.sub(r"after\(\s*", 'look(sSentence[m.end():], ', s)                                      # after(sSentence)
    s = re.sub(r"textarea\(\s*", 'look(sSentence, ', s)                                             # textarea(sSentence)
    s = re.sub(r"/0", 'sSentence0[m.start():m.end()]', s)                                           # /0
    s = re.sub(r"before0\(\s*", 'look(sSentence0[:m.start()], ', s)                                 # before0(sSentence)
    s = re.sub(r"after0\(\s*", 'look(sSentence0[m.end():], ', s)                                    # after0(sSentence)
    s = re.sub(r"textarea0\(\s*", 'look(sSentence0, ', s)                                           # textarea0(sSentence)
    s = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', s)
    s = re.sub(r"[\\](\d+)", 'm.group(\\1)', s)
    return s


def uppercase (sText, sLang):
    "(flag i is not enough): converts regex to uppercase regex: 'foo' becomes '[Ff][Oo][Oo]', but 'Bar' becomes 'B[Aa][Rr]'."







|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

|
|
|







54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91


def prepareFunction (s):
    "convert simple rule syntax to a string of Python code"
    s = s.replace("__also__", "bCondMemo")
    s = s.replace("__else__", "not bCondMemo")
    s = s.replace("sContext", "_sAppContext")
    s = re.sub(r"\bstart\(\)", 'before("^ *$|, *$")', s)
    s = re.sub(r"\brealstart\(\)", 'before("^ *$")', s)
    s = re.sub(r"\bstart0\(\)", 'before0("^ *$|, *$")', s)
    s = re.sub(r"\brealstart0\(\)", 'before0("^ *$")', s)
    s = re.sub(r"\bend\(\)", 'after("^ *$|^,")', s)
    s = re.sub(r"\brealend\(\)", 'after("^ *$")', s)
    s = re.sub(r"\bend0\(\)", 'after0("^ *$|^,")', s)
    s = re.sub(r"\brealend0\(\)", 'after0("^ *$")', s)
    s = re.sub(r"\b(select|exclude)[(][\\](\d+)", '\\1(dTokenPos, m.start(\\2), m.group(\\2)', s)
    s = re.sub(r"\bdefine[(][\\](\d+)", 'define(dTokenPos, m.start(\\1)', s)
    s = re.sub(r"\b(morph|info)[(][\\](\d+)", '\\1((m.start(\\2), m.group(\\2))', s)
    s = re.sub(r"\b(morph|info)[(]", '\\1(dTokenPos, ', s)
    s = re.sub(r"\b(sugg\w+|switch\w+)\(@", '\\1(m.group(i[4])', s)
    s = re.sub(r"\bword\(\s*1\b", 'nextword1(sSentence, m.end()', s)                                # word(1)
    s = re.sub(r"\bword\(\s*-1\b", 'prevword1(sSentence, m.start()', s)                             # word(-1)
    s = re.sub(r"\bword\(\s*(\d)", 'nextword(sSentence, m.end(), \\1', s)                           # word(n)
    s = re.sub(r"\bword\(\s*-(\d)", 'prevword(sSentence, m.start(), \\1', s)                        # word(-n)
    s = re.sub(r"\bbefore\(\s*", 'look(sSentence[:m.start()], ', s)                                 # before(sSentence)
    s = re.sub(r"\bafter\(\s*", 'look(sSentence[m.end():], ', s)                                    # after(sSentence)
    s = re.sub(r"\btextarea\(\s*", 'look(sSentence, ', s)                                           # textarea(sSentence)
    s = re.sub(r"/0", 'sSentence0[m.start():m.end()]', s)                                           # /0
    s = re.sub(r"\bbefore0\(\s*", 'look(sSentence0[:m.start()], ', s)                               # before0(sSentence)
    s = re.sub(r"\bafter0\(\s*", 'look(sSentence0[m.end():], ', s)                                  # after0(sSentence)
    s = re.sub(r"\btextarea0\(\s*", 'look(sSentence0, ', s)                                         # textarea0(sSentence)
    s = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', s)
    s = re.sub(r"[\\](\d+)", 'm.group(\\1)', s)
    return s


def uppercase (sText, sLang):
    "(flag i is not enough): converts regex to uppercase regex: 'foo' becomes '[Ff][Oo][Oo]', but 'Bar' becomes 'B[Aa][Rr]'."

Modified gc_lang/fr/rules.grx from [bcfa5485c2] to [8114fedf04].

1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
....
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
....
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
.....
11862
11863
11864
11865
11866
11867
11868

11869

11870
11871

11872
11873




11874
11875
11876
11877
11878
11879

11880
11881
11882
11883
11884
11885
11886
11887
11888
11889
11890
11891
11892

11893
11894
11895
11896
11897
11898
11899
11900
11901
11902
.....
14717
14718
14719
14720
14721
14722
14723

14724
14725
14726
14727
14728
14729
14730
14731
14732
14733
14734
14735
14736

14737
14738
14739
14740

14741
14742
14743
14744
14745
14746
14747
.....
16804
16805
16806
16807
16808
16809
16810



16811
16812
16813
16814
16815
16816
16817
.....
17607
17608
17609
17610
17611
17612
17613

17614
17615
17616
17617
17618
17619
17620
.....
17696
17697
17698
17699
17700
17701
17702


17703
17704
17705
17706
17707
17708
17709
.....
19189
19190
19191
19192
19193
19194
19195

19196
19197
19198
19199
19200
19201
19202
.....
20025
20026
20027
20028
20029
20030
20031
20032
20033
20034
20035
20036
20037
20038
20039
.....
20052
20053
20054
20055
20056
20057
20058
20059
20060
20061
20062
20063
20064
20065
20066
.....
26370
26371
26372
26373
26374
26375
26376
26377
26378
26379
26380
26381
26382
26383
26384
.....
31689
31690
31691
31692
31693
31694
31695
31696
31697
31698
31699
31700
31701
31702
31703
31704
31705
31706
.....
31771
31772
31773
31774
31775
31776
31777
31778
31779
31780
31781
31782

31783
31784
31785
31786
31787
31788

31789
31790
31791
31792
31793
31794
31795
31796
31797
31798
31799
31800
31801

31802
31803
31804
31805
31806

31807
31808
31809
31810
31811
31812
31813
31814
31815
31816
31817
31818
31819
31820
31821
31822
31823
    ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹]|)) ?)([kcmµn]?(?:[slgJKVΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|jours?|semaines|mois|ans?|euros?|heures?|px|MHz|°C|℃)(?![’'])  @@0,0,$
        <<- option("num") ->> =formatNumber(\2) + " " + \3          && Avec une unité de mesure, mettez un espace insécable.
        <<- __else__ ->> "\2 \3"                                    && Avec une unité de mesure, mettez un espace insécable.

__[s]/unit(unit_nbsp_avant_unités2)__
    ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹])) ?)([a-zA-Zµ][a-zA-Z0-9Ωℓ⁰¹²³⁴⁵⁶⁷⁸⁹/·]*)  @@0,0,$
        <<- morph(\3, ";S", ":[VCR]") or mbUnit(\3) or not spell(\3) >>>
        <<- option("num") ->> =formatNumber(\2) + " " + \3          && Si “\3” est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable.
        <<- __else__ ->> "\2 \3"                                    && Si “\3” est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable.

__[s]/unit(unit_nbsp_avant_unités3)__
    ((\d+) )([a-zA-Zµ][a-zA-Z0-9Ωℓ⁰¹²³⁴⁵⁶⁷⁸⁹/·]*)(?![’'])  @@0,0,$
        <<- (\2.__len__() > 4 and not spell(\3)) or morph(\3, ";S", ":[VCR]") or mbUnit(\3) >>>
        <<- option("num") ->> =formatNumber(\2) + " " + \3          && Si “\3” est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable.
        <<- __else__ ->> "\2 \3"                                    && Si “\3” est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable.

TEST: Ça a duré {{3µs}}                                 ->> 3 µs
TEST: Ça a duré {{3,5 µs}}                              ->> 3,5 µs
TEST: il y en a {{3 m²}}                                ->> 3 m²
TEST: il a fait {{10%}}                                 ->> 10 %
TEST: Ça coûte {{13,4¥}}.                               ->> 13,4 ¥
TEST: il mesure {{30,3 cm}}                             ->> 30,3 cm
................................................................................

TEST: C’était mon affaire{{”}}.
TEST: C’est {{“}}compliqué.


__[i]/typo(typo_guillemet_simple_ouvrant_non_fermé)__
    (‘)\w\w[^’']+$  @@0
        <<- before(" $") or isStart() -1>> _                                                        && Guillemet fermant introuvable dans la suite du paragraphe.
__[i]/typo(typo_guillemet_simple_fermant_non_ouvert)__
    ^[^‘']+\w\w(’)  @@$
        <<- after("^ ") or isEnd() -1>> _                                                           && Guillemet ouvrant introuvable dans ce paragraphe.

TEST: ce {{‘}}test ne finira jamais.
TEST: ces actions ne représentent rien{{’}} pour moi.

TEST: « Je suis là.
TEST: — Oui, nous t’avons vu arriver. »
TEST: « J’en suis “malade”. »
................................................................................
TEST: Celui qui y croit {{à les}} moyens d’y parvenir.
TEST: à tous les sots, je dis “merde”.


    à  ?$:W¿  *WORD
        <<- /conf/ \-1.islower() and not value(\-1, "|coté|sont|") >>>
        <<- /conf/ morph(\-1, ":(?:V.......[_z][az].*:Q|V1.*:Ip:2p)", ":[MGWNY]") -1>> a            && Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
        <<- /conf/ __also__ and morph(\-1, ":V1.*:(?:Ip:2p|Q)", "*") and not value(<1, "|il|elle|on|n’|les|l’|m’|t’|s’|d’|en|y|lui|nous|vous|leur|")
        --1>> =suggVerbInfi(\-1)                                                                    && Le verbe devrait être à l’infinitif.
        <<- /conf/ __else__ and morph(\-1, ":[123][sp]", "*") and not value(\-1, "|tord|tords|") >>>
        <<- /conf/ morph(\-1, ":V2.*:I[ps]:3s", "*") --1>> =suggVerbPpas(\-1, ":m:s")               && Incohérence : “\1” est une préposition ; “\-1” est une forme verbale.
        <<- /conf/ __also__ -1>> a                                                                  && Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
        <<- /conf/ __else__ --1>> _                                                                 && Incohérence : “\1” est une préposition ; “\-1” est une forme verbale.

TEST: L’homme {{à}} ouvert la boîte.                                                    ->> a
................................................................................
TEST: depuis {{prêt}} de 10 minutes
TEST: depuis {{prés}} de vingt siècles.
TEST: collait au millimètre près à la réalité


# prix / pris
__conf_prix_pris!7__

    [à|a] n’importe [quel+s] pris

    quel [est|était|fut|serait|sera] [le|mon|ton|son|notre|votre|leur|leurs] pris
    à [quel+s] pris

        <<- /conf/ --1>> prix                                               && Confusion : pour évoquer la valeur d’une chose, écrivez “prix”.|https://fr.wiktionary.org/wiki/prix





    [à|a] pris [coûtant|coutant]
        <<- /conf/ ->> à prix coûtant                                       && Confusion : pour évoquer la valeur d’une chose, écrivez “prix”.|https://fr.wiktionary.org/wiki/prix

    [au|aux] pris [fort+s]
        <<- /conf/ ->> au prix fort                                         && Confusion : pour évoquer la valeur d’une chose, écrivez “prix”.|https://fr.wiktionary.org/wiki/prix


    prix à la gorge
    prix dans [la|une|cette] [tourmente|tempête|tornade]
    prix dans [la|une|cette] coulée de [boue|lave]
    prix dans l’ [orage|ouragan]
    prix dans les [flots|vagues|tempêtes|tornades|orages|ouragans]
    prix par surprise
    prix entre deux feux
    prix la main dans le sac
    prix dans [mes|tes|ses|nos|vos|leurs] bras
        <<- /conf/ -1>> pris                                                && Confusion probable : le participe de prendre s’écrit “pris”.|https://fr.wiktionary.org/wiki/pris

TEST: réussir à n’importe quel {{pris}}.
TEST: quel est leur {{pris}} ?

TEST: {{prix}} par surprise,
TEST: vendre {{à pris coûtant}}
TEST: encore un jeu vendu en kit {{au pris fort}}


# puits / puis
__conf_puits_puis__
    [des|ces|mes|tes|ses|nos|vos|leurs|quelques|ce|mon|du] puis
        <<- /conf/ not \1.isupper() -2>> puits
        && Confusion. Si vous parlez d’un trou fait pour puiser quelque chose (ou pour amener quelque chose), écrivez “puits”.|https://fr.wiktionary.org/wiki/puits
................................................................................
    depuis *NUM                                     {unit_mesure_plur_mas}
    depuis près [de|d’] $:B:e:p                     {unit_mesure_plur_mas}
    depuis près [de|d’] *NUM                        {unit_mesure_plur_mas}
    depuis quelques                                 {unit_mesure_plur_mas}
    en *NUM                                         {unit_mesure_plur_mas}
    pendant [des|plusieurs|quelques|*NUM|$:B:e:p]   {unit_mesure_plur_mas}
    pendant près [de|d’] [*NUM|$:B:e:p]             {unit_mesure_plur_mas}

        <<- not morph(>1, ":A.*:[me]:[pi]") ~>> *

    au bout de [nombreuses|plusieurs|quelques]      {unit_mesure_plur_fem}
    après [des|plusieurs|quelques|*NUM|$:B:e:p]     {unit_mesure_plur_fem}
    après près [de|d’] [*NUM|$:B:e:p]               {unit_mesure_plur_fem}
    depuis $:B:e:p                                  {unit_mesure_plur_fem}
    depuis *NUM                                     {unit_mesure_plur_fem}
    depuis près [de|d’] $:B:e:p                     {unit_mesure_plur_fem}
    depuis près [de|d’] *NUM                        {unit_mesure_plur_fem}
    depuis quelques                                 {unit_mesure_plur_fem}
    en *NUM                                         {unit_mesure_plur_fem}
    pendant [des|plusieurs|quelques|*NUM|$:B:e:p]   {unit_mesure_plur_fem}
    pendant près [de|d’] [*NUM|$:B:e:p]             {unit_mesure_plur_fem}

        <<- not morph(>1, ":A.*:[fe]:[pi]") ~>> *

    $:B:e:p                                         {unit_mesure_plur} auparavant
    $:B:e:p                                         {unit_mesure_plur} plus [tôt|tard]

    à quelques                                      {unit_mesure_plur} près
    après [des|plusieurs|quelques|*NUM|$:B:e:p]     {unit_mesure_plur} de bons et loyaux services
    après près [de|d’] [*NUM|$:B:e:p]               {unit_mesure_plur} de bons et loyaux services
    au fil des                                      {unit_mesure_plur} à venir
    dans les                                        {unit_mesure_plur} à venir
    des                                             {unit_mesure_plur} plus [tôt|tard]
    des                                             {unit_mesure_plur} à venir
................................................................................
        <<- ~1:2>> *

    entre [eux|elles|nous|vous|iels]
        <<- not morph(<1, ":Ov|>(?:il|on|elle)|>d’") ~>> *

    entre [moi|toi|lui|elle|nous|vous|eux|elles] et [moi|toi|lui|elle|nous|vous|eux|elles]
        <<- ~>> *




    juste à temps
        <<- not morph(<1, ":D") ~>> *

    haut [placé+ses]
        <<- not value(<1, "|en|de|d’|") ~1>> *

................................................................................
    >soldat d’ élite
    >solution [de|d’] [rechange|repli]
    >sommier à lattes
    >sonnette d’ alarme
    >sortie [de|d’] secours
    >soue à >cochon
    >sourate [*NUM|$:B] ?,¿ verset [*NUM|$:B]

    >souvenir d’ enfance
    >star du x
    >station [de|d’] radio
    >sujet [de|d’] [prédilection|préoccupation]
    >suspension [de|d’] séance
    >syndicat du crime
    >système d’ exploitation
................................................................................
    >vérification [de|d’] routine
    vernis à ongles
    >ver [de|d’] terre
    >verre à pied
    >vêtement [de|d’] rechange
    >vidéo X
    >vie [de|d’] bohème


    >virage à [*NUM|$:B:e:p] degrés
    virus d’ origine animale
    >vitamine [A|B|C|D|E|F]
    >voie [de|d’] [garage|recours|perdition]
    >vol à l’ étalage
    >vol à la [sauvette|tire]
    >vol à main armée
................................................................................
TEST: C’est à la fois la plus intéressante du livre et la plus délicate.
TEST: Pour un peu, on les eût pris pour des détenus exemplaires.
TEST: Ce ne sera pas tous les jours facile
TEST: d’une tête plus petit que moi, il mesurait à peine um mètre cinquante
TEST: triompher par la force, l’intelligence la violence ou la ruse
TEST: une table en bois brut
TEST: c’est à devenir fou, à se taper la tête contre les murs



@@@@
@@@@
@@@@
@@@@
@@@@END_GRAPH                                                                                      _
................................................................................
    la [>chant|chan|>champ] de l’ [heur|heure|eurent]
        <<- /conf/ -2:0>> Chandeleur                    && Confusion : la Chandeleur est une fête.|http://fr.wikipedia.org/wiki/Chandeleur

TEST: C’est {{la}} {{champ de l’heur}}.


__conf_champ_chant__
    [chan|>chant] de [>blé|>betterave|>fleur|>force|>lavande|maïs|mais|>tournesol|>tulipe|>vision]
        <<- /conf/ -1>> =\1.replace("nt", "mp").replace("NT", "MP")     && Confusion probable. Un chant est ce qui se chante.|https://fr.wiktionary.org/wiki/champ

    [>tomber|>mourir|>décéder|>trépasser]   [au|aux]    [chan|>chant] d’ >honneur
    sur                                     [le|les]    [chan|>chant] d’ >honneur
        <<- /conf/ -3>> champ|champs                    && Confusion. Locution “champ d’honneur”.|https://fr.wiktionary.org/wiki/champ_d%E2%80%99honneur

    >fleur des [chants|chans]
................................................................................
TEST: belle fleur des {{chants}}, veuillez entendre ma supplique
TEST: je leur laisse le {{chant}} libre
TEST: donnons-leur le {{chant}} libre et cessons de nous inquieter


# colon / côlon
__conf_côlon_colon__
    cancer du colon
        <<- /conf/ -3>> côlon                           && Confusion : le côlon est un segment du gros intestin, le colon colonise.

TEST: Il a le cancer du {{colon}}.


# censé / sensé
__conf_censé_sensé__
................................................................................

    <start>  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  *WORD  des  @:N.*:[pi]  ?[ne|n’]¿   ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿   @[123]p¬:A.*:p
    <start>  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  *WORD  des  @:N.*:[pi]  ?[ne|n’]¿   [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]          @[123]p
    <start>  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  *WORD  des  @:N.*:[pi]  ?[ne|n’]¿   [le|la|l’|les]                  [lui|leur|en|y]              @[123]p
    <start>  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  *WORD  des  @:N.*:[pi]  ?[ne|n’]¿   [lui|leur|y]                    en                           @[123]p
        <<- morph(\3, ":N.*:[pi]") ~4:5>> *

#### isEndOfNG ####
# <end>
# @:[VR]¬:[NAP]
# , @¬:[NA]
# ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|y|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|iel|iels|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
# ?,¿  [/_VCint_|/_VCimp_]


................................................................................
TEST: Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître.
TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
TEST: Quand j’aurai soif et faim, je m’arrêterai.


# Si suivi du conditionnel ou du subjonctif
__vmode_si_sujet_conditionnel_subjonctif__
    [<start>|,|(]  si     [j’|J’|t’|T’]       @:[SK]¬:(?:G|V0|I)
    [<start>|,|(]  si     @:(?:Os|M)          @:[SK]¬:(?:G|V0|I)
    [<start>|,|(]  s’     [il|ils|iel|iels]   @:[SK]¬:(?:G|V0|I)
        <<- /vmode/ -4>> _                                                                          && Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.

TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.
TEST: Si j’{{irais}} le faire


__vmode_si_sujet_conditionnel__
................................................................................
TEST: si nous {{aurions}} connu cet homme, on se serait pas trompé                  ->> avions
TEST: si vous {{auriez}} avancé, ce serait différent                                ->> aviez
TEST: s’ils {{auraient}} deviné la solution, ils auraient pas demandé               ->> avaient
TEST: si le patron {{aurait}} pensé la chose, on l’aurait su.                       ->> avait
TEST: si les femmes {{auraient}} parlé, je l’aurais su.                             ->> avaient



# Quand/lorsque/puisque/pourquoi + indicatif
__vmode_quand_lorsque_indicatif__
    [quand|lorsque|lorsqu’|puisque|puisqu’]  @:(?:Os|M)  @:V.*:S¬:[GI]
    [quand|lorsque|lorsqu’|puisque|puisqu’]  @:(?:Os|M)  @:V0e.*:S

        <<- /vmode/ -3>> =suggVerbMode(\3, ":I", \2)                                                && Après « quand » ou « lorsque » ou « puisque », le verbe ne s’emploie pas au subjonctif mais à l’indicatif.

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

    [<start>|,|(]  pourquoi  @:(?:Os|M)  @:V.*:S¬:[GI]

        <<- /vmode/ --1>> =suggVerbMode(\-1, ":I", \-2)                                             && Après « pourquoi », le verbe ne s’emploie pas au subjonctif mais à l’indicatif.

TEST: quand elle {{rencontrât}} son créateur
TEST: lorsqu’il y {{eût}} du grabuge, nous montâmes tous sur le pont.
TEST: pourquoi Mélanie {{vienne}} à cette réception
TEST: quel homme eût abandonné un empire pour une promesse ?
TEST: qui eût abandonné un empire pour une promesse ?
TEST: quels amis ils eussent trompés pour si peu ?


# Dès que + indicatif
__vmode_dès_que__
    dès  [que|qu’]  @:(?:Os|M)  @:S¬:[IG]

        <<- /vmode/ -4>> =suggVerbMode(\4, ":I", \3)                                                && Après “dès que”, le verbe ne devrait pas être au subjonctif.
#        <<- morph(\1, ":(?:Os|M)", False) and morph(\2, ":K", False)        -2>> =suggVerbMode(@, ":If", \1)    && Ce verbe ne devrait pas être au conditionnel.

#TEST: dès que je le {{verrais}}
TEST: dès qu’il le {{voie}}

TEST: donnant à entendre qu’il avait l’intention de violer Laura dès qu’il en aurait l’occasion


# indicatif nécessaire
__vmode_sujet_indicatif__
    <start>  [je|tu|il|ils|elle|elles|on|nous|vous|iel|iels]  @:S¬:[GIK]|V0a.*:Sq
        <<- /vmode/ -3>> =suggVerbMode(\3, ":I", \2)                                                && Ce verbe ne devrait pas être au subjonctif.

    <start>  j’  @:S¬:[GIK]|V0a.*:Sq:1s
        <<- /vmode/ -3>> =suggVerbMode(\3, ":I", "je")                                              && Ce verbe ne devrait pas être au subjonctif.

TEST: Il {{ait}} parti.
TEST: Il en {{conclue}} qu’il a eu raison.
TEST: j’en {{aie}} marre
TEST: j’{{aie}} faim









|
|




|
|







 







|


|







 







|







 







>

>


>


>
>
>
>






>











|
|
>
|
|
|







 







>













>




>







 







>
>
>







 







>







 







>
>







 







>







 







|







 







|







 







|







 







<


|







 







<


|

>
|





>












|
>
|




>





|
|
<
<
<







1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
....
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
....
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
.....
11862
11863
11864
11865
11866
11867
11868
11869
11870
11871
11872
11873
11874
11875
11876
11877
11878
11879
11880
11881
11882
11883
11884
11885
11886
11887
11888
11889
11890
11891
11892
11893
11894
11895
11896
11897
11898
11899
11900
11901
11902
11903
11904
11905
11906
11907
11908
11909
11910
11911
.....
14726
14727
14728
14729
14730
14731
14732
14733
14734
14735
14736
14737
14738
14739
14740
14741
14742
14743
14744
14745
14746
14747
14748
14749
14750
14751
14752
14753
14754
14755
14756
14757
14758
14759
.....
16816
16817
16818
16819
16820
16821
16822
16823
16824
16825
16826
16827
16828
16829
16830
16831
16832
.....
17622
17623
17624
17625
17626
17627
17628
17629
17630
17631
17632
17633
17634
17635
17636
.....
17712
17713
17714
17715
17716
17717
17718
17719
17720
17721
17722
17723
17724
17725
17726
17727
.....
19207
19208
19209
19210
19211
19212
19213
19214
19215
19216
19217
19218
19219
19220
19221
.....
20044
20045
20046
20047
20048
20049
20050
20051
20052
20053
20054
20055
20056
20057
20058
.....
20071
20072
20073
20074
20075
20076
20077
20078
20079
20080
20081
20082
20083
20084
20085
.....
26389
26390
26391
26392
26393
26394
26395
26396
26397
26398
26399
26400
26401
26402
26403
.....
31708
31709
31710
31711
31712
31713
31714

31715
31716
31717
31718
31719
31720
31721
31722
31723
31724
.....
31789
31790
31791
31792
31793
31794
31795

31796
31797
31798
31799
31800
31801
31802
31803
31804
31805
31806
31807
31808
31809
31810
31811
31812
31813
31814
31815
31816
31817
31818
31819
31820
31821
31822
31823
31824
31825
31826
31827
31828
31829
31830
31831
31832
31833
31834



31835
31836
31837
31838
31839
31840
31841
    ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹]|)) ?)([kcmµn]?(?:[slgJKVΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|jours?|semaines|mois|ans?|euros?|heures?|px|MHz|°C|℃)(?![’'])  @@0,0,$
        <<- option("num") ->> =formatNumber(\2) + " " + \3          && Avec une unité de mesure, mettez un espace insécable.
        <<- __else__ ->> "\2 \3"                                    && Avec une unité de mesure, mettez un espace insécable.

__[s]/unit(unit_nbsp_avant_unités2)__
    ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹])) ?)([a-zA-Zµ][a-zA-Z0-9Ωℓ⁰¹²³⁴⁵⁶⁷⁸⁹/·]*)  @@0,0,$
        <<- morph(\3, ";S", ":[VCR]") or mbUnit(\3) or not spell(\3) >>>
        <<- option("num") ->> =formatNumber(\2) + " " + \3          && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable.
        <<- __else__ ->> "\2 \3"                                    && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable.

__[s]/unit(unit_nbsp_avant_unités3)__
    ((\d+) )([a-zA-Zµ][a-zA-Z0-9Ωℓ⁰¹²³⁴⁵⁶⁷⁸⁹/·]*)(?![’'])  @@0,0,$
        <<- (\2.__len__() > 4 and not spell(\3)) or morph(\3, ";S", ":[VCR]") or mbUnit(\3) >>>
        <<- option("num") ->> =formatNumber(\2) + " " + \3          && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable.
        <<- __else__ ->> "\2 \3"                                    && Si ‹\3› est une unité de mesure, il manque un espace insécable. Si le nombre se rapporte au mot suivant, c’est aussi valable.

TEST: Ça a duré {{3µs}}                                 ->> 3 µs
TEST: Ça a duré {{3,5 µs}}                              ->> 3,5 µs
TEST: il y en a {{3 m²}}                                ->> 3 m²
TEST: il a fait {{10%}}                                 ->> 10 %
TEST: Ça coûte {{13,4¥}}.                               ->> 13,4 ¥
TEST: il mesure {{30,3 cm}}                             ->> 30,3 cm
................................................................................

TEST: C’était mon affaire{{”}}.
TEST: C’est {{“}}compliqué.


__[i]/typo(typo_guillemet_simple_ouvrant_non_fermé)__
    (‘)\w\w[^’']+$  @@0
        <<- before(" $") or start() -1>> _                                                        && Guillemet fermant introuvable dans la suite du paragraphe.
__[i]/typo(typo_guillemet_simple_fermant_non_ouvert)__
    ^[^‘']+\w\w(’)  @@$
        <<- after("^ ") or end() -1>> _                                                           && Guillemet ouvrant introuvable dans ce paragraphe.

TEST: ce {{‘}}test ne finira jamais.
TEST: ces actions ne représentent rien{{’}} pour moi.

TEST: « Je suis là.
TEST: — Oui, nous t’avons vu arriver. »
TEST: « J’en suis “malade”. »
................................................................................
TEST: Celui qui y croit {{à les}} moyens d’y parvenir.
TEST: à tous les sots, je dis “merde”.


    à  ?$:W¿  *WORD
        <<- /conf/ \-1.islower() and not value(\-1, "|coté|sont|") >>>
        <<- /conf/ morph(\-1, ":(?:V.......[_z][az].*:Q|V1.*:Ip:2p)", ":[MGWNY]") -1>> a            && Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
        <<- /conf/ __also__ and morph(\-1, ":V1.*:(?:Ip:2p|Q)", ":N") and not value(<1, "|il|elle|on|n’|les|l’|m’|t’|s’|d’|en|y|lui|nous|vous|leur|")
        --1>> =suggVerbInfi(\-1)                                                                    && Le verbe devrait être à l’infinitif.
        <<- /conf/ __else__ and morph(\-1, ":[123][sp]", "*") and not value(\-1, "|tord|tords|") >>>
        <<- /conf/ morph(\-1, ":V2.*:I[ps]:3s", "*") --1>> =suggVerbPpas(\-1, ":m:s")               && Incohérence : “\1” est une préposition ; “\-1” est une forme verbale.
        <<- /conf/ __also__ -1>> a                                                                  && Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
        <<- /conf/ __else__ --1>> _                                                                 && Incohérence : “\1” est une préposition ; “\-1” est une forme verbale.

TEST: L’homme {{à}} ouvert la boîte.                                                    ->> a
................................................................................
TEST: depuis {{prêt}} de 10 minutes
TEST: depuis {{prés}} de vingt siècles.
TEST: collait au millimètre près à la réalité


# prix / pris
__conf_prix_pris!7__
    ## prix
    [à|a] n’importe [quel+s] pris
    [à|a] bon pris
    quel [est|était|fut|serait|sera] [le|mon|ton|son|notre|votre|leur|leurs] pris
    à [quel+s] pris
    >avoir son pris
        <<- /conf/ --1>> prix                                               && Confusion : pour évoquer la valeur d’une chose, écrivez “prix”.|https://fr.wiktionary.org/wiki/prix

    au pris [de|d’]
    [à|a] pris modique
        <<- /conf/ -2>> prix                                                && Confusion : pour évoquer la valeur d’une chose, écrivez “prix”.|https://fr.wiktionary.org/wiki/prix

    [à|a] pris [coûtant|coutant]
        <<- /conf/ ->> à prix coûtant                                       && Confusion : pour évoquer la valeur d’une chose, écrivez “prix”.|https://fr.wiktionary.org/wiki/prix

    [au|aux] pris [fort+s]
        <<- /conf/ ->> au prix fort                                         && Confusion : pour évoquer la valeur d’une chose, écrivez “prix”.|https://fr.wiktionary.org/wiki/prix

    ## pris
    prix à la gorge
    prix dans [la|une|cette] [tourmente|tempête|tornade]
    prix dans [la|une|cette] coulée de [boue|lave]
    prix dans l’ [orage|ouragan]
    prix dans les [flots|vagues|tempêtes|tornades|orages|ouragans]
    prix par surprise
    prix entre deux feux
    prix la main dans le sac
    prix dans [mes|tes|ses|nos|vos|leurs] bras
        <<- /conf/ -1>> pris                                                && Confusion probable : le participe de prendre s’écrit “pris”.|https://fr.wiktionary.org/wiki/pris

TEST: réussir à n’importe quel {{pris}}.                                ->> prix
TEST: quel est leur {{pris}} ?                                          ->> prix
TEST: au {{pris}} de sa vie                                             ->> prix
TEST: {{prix}} par surprise,                                            ->> pris
TEST: vendre {{à pris coûtant}}                                         ->> à prix coûtant
TEST: encore un jeu vendu en kit {{au pris fort}}                       ->> au prix fort


# puits / puis
__conf_puits_puis__
    [des|ces|mes|tes|ses|nos|vos|leurs|quelques|ce|mon|du] puis
        <<- /conf/ not \1.isupper() -2>> puits
        && Confusion. Si vous parlez d’un trou fait pour puiser quelque chose (ou pour amener quelque chose), écrivez “puits”.|https://fr.wiktionary.org/wiki/puits
................................................................................
    depuis *NUM                                     {unit_mesure_plur_mas}
    depuis près [de|d’] $:B:e:p                     {unit_mesure_plur_mas}
    depuis près [de|d’] *NUM                        {unit_mesure_plur_mas}
    depuis quelques                                 {unit_mesure_plur_mas}
    en *NUM                                         {unit_mesure_plur_mas}
    pendant [des|plusieurs|quelques|*NUM|$:B:e:p]   {unit_mesure_plur_mas}
    pendant près [de|d’] [*NUM|$:B:e:p]             {unit_mesure_plur_mas}
    un ou deux                                      {unit_mesure_plur_mas} plus [tôt|tard]
        <<- not morph(>1, ":A.*:[me]:[pi]") ~>> *

    au bout de [nombreuses|plusieurs|quelques]      {unit_mesure_plur_fem}
    après [des|plusieurs|quelques|*NUM|$:B:e:p]     {unit_mesure_plur_fem}
    après près [de|d’] [*NUM|$:B:e:p]               {unit_mesure_plur_fem}
    depuis $:B:e:p                                  {unit_mesure_plur_fem}
    depuis *NUM                                     {unit_mesure_plur_fem}
    depuis près [de|d’] $:B:e:p                     {unit_mesure_plur_fem}
    depuis près [de|d’] *NUM                        {unit_mesure_plur_fem}
    depuis quelques                                 {unit_mesure_plur_fem}
    en *NUM                                         {unit_mesure_plur_fem}
    pendant [des|plusieurs|quelques|*NUM|$:B:e:p]   {unit_mesure_plur_fem}
    pendant près [de|d’] [*NUM|$:B:e:p]             {unit_mesure_plur_fem}
    une ou deux                                     {unit_mesure_plur_fem} plus [tôt|tard]
        <<- not morph(>1, ":A.*:[fe]:[pi]") ~>> *

    $:B:e:p                                         {unit_mesure_plur} auparavant
    $:B:e:p                                         {unit_mesure_plur} plus [tôt|tard]
    $:B:e:p ou $:B:e:p                              {unit_mesure_plur} plus [tôt|tard]
    à quelques                                      {unit_mesure_plur} près
    après [des|plusieurs|quelques|*NUM|$:B:e:p]     {unit_mesure_plur} de bons et loyaux services
    après près [de|d’] [*NUM|$:B:e:p]               {unit_mesure_plur} de bons et loyaux services
    au fil des                                      {unit_mesure_plur} à venir
    dans les                                        {unit_mesure_plur} à venir
    des                                             {unit_mesure_plur} plus [tôt|tard]
    des                                             {unit_mesure_plur} à venir
................................................................................
        <<- ~1:2>> *

    entre [eux|elles|nous|vous|iels]
        <<- not morph(<1, ":Ov|>(?:il|on|elle)|>d’") ~>> *

    entre [moi|toi|lui|elle|nous|vous|eux|elles] et [moi|toi|lui|elle|nous|vous|eux|elles]
        <<- ~>> *

    , entre [tous|toutes] ,
        <<- ~>> *

    juste à temps
        <<- not morph(<1, ":D") ~>> *

    haut [placé+ses]
        <<- not value(<1, "|en|de|d’|") ~1>> *

................................................................................
    >soldat d’ élite
    >solution [de|d’] [rechange|repli]
    >sommier à lattes
    >sonnette d’ alarme
    >sortie [de|d’] secours
    >soue à >cochon
    >sourate [*NUM|$:B] ?,¿ verset [*NUM|$:B]
    >sourire [de|d’] connivence
    >souvenir d’ enfance
    >star du x
    >station [de|d’] radio
    >sujet [de|d’] [prédilection|préoccupation]
    >suspension [de|d’] séance
    >syndicat du crime
    >système d’ exploitation
................................................................................
    >vérification [de|d’] routine
    vernis à ongles
    >ver [de|d’] terre
    >verre à pied
    >vêtement [de|d’] rechange
    >vidéo X
    >vie [de|d’] bohème
    >violence [par|sur] personne dépositaire de l’ autorité publique
    >violence [par|sur] personnes dépositaires de l’ autorité publique
    >virage à [*NUM|$:B:e:p] degrés
    virus d’ origine animale
    >vitamine [A|B|C|D|E|F]
    >voie [de|d’] [garage|recours|perdition]
    >vol à l’ étalage
    >vol à la [sauvette|tire]
    >vol à main armée
................................................................................
TEST: C’est à la fois la plus intéressante du livre et la plus délicate.
TEST: Pour un peu, on les eût pris pour des détenus exemplaires.
TEST: Ce ne sera pas tous les jours facile
TEST: d’une tête plus petit que moi, il mesurait à peine um mètre cinquante
TEST: triompher par la force, l’intelligence la violence ou la ruse
TEST: une table en bois brut
TEST: c’est à devenir fou, à se taper la tête contre les murs
TEST: quitte à en souffrir et fût-ce au prix de sa vie


@@@@
@@@@
@@@@
@@@@
@@@@END_GRAPH                                                                                      _
................................................................................
    la [>chant|chan|>champ] de l’ [heur|heure|eurent]
        <<- /conf/ -2:0>> Chandeleur                    && Confusion : la Chandeleur est une fête.|http://fr.wikipedia.org/wiki/Chandeleur

TEST: C’est {{la}} {{champ de l’heur}}.


__conf_champ_chant__
    [chan|>chant] de [>blé|>betterave|>coquelicot|>fleur|>force|>jonquille|>lavande|maïs|mais|>mine|>navet|>patate|>pavot|>pomme|>tournesol|>tabac|>théier|>thé|>tulipe|>vision]
        <<- /conf/ -1>> =\1.replace("nt", "mp").replace("NT", "MP")     && Confusion probable. Un chant est ce qui se chante.|https://fr.wiktionary.org/wiki/champ

    [>tomber|>mourir|>décéder|>trépasser]   [au|aux]    [chan|>chant] d’ >honneur
    sur                                     [le|les]    [chan|>chant] d’ >honneur
        <<- /conf/ -3>> champ|champs                    && Confusion. Locution “champ d’honneur”.|https://fr.wiktionary.org/wiki/champ_d%E2%80%99honneur

    >fleur des [chants|chans]
................................................................................
TEST: belle fleur des {{chants}}, veuillez entendre ma supplique
TEST: je leur laisse le {{chant}} libre
TEST: donnons-leur le {{chant}} libre et cessons de nous inquieter


# colon / côlon
__conf_côlon_colon__
    >cancer du colon
        <<- /conf/ -3>> côlon                           && Confusion : le côlon est un segment du gros intestin, le colon colonise.

TEST: Il a le cancer du {{colon}}.


# censé / sensé
__conf_censé_sensé__
................................................................................

    <start>  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  *WORD  des  @:N.*:[pi]  ?[ne|n’]¿   ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿   @[123]p¬:A.*:p
    <start>  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  *WORD  des  @:N.*:[pi]  ?[ne|n’]¿   [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]          @[123]p
    <start>  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  *WORD  des  @:N.*:[pi]  ?[ne|n’]¿   [le|la|l’|les]                  [lui|leur|en|y]              @[123]p
    <start>  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  *WORD  des  @:N.*:[pi]  ?[ne|n’]¿   [lui|leur|y]                    en                           @[123]p
        <<- morph(\3, ":N.*:[pi]") ~4:5>> *

#### end of NG ####
# <end>
# @:[VR]¬:[NAP]
# , @¬:[NA]
# ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|y|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|iel|iels|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
# ?,¿  [/_VCint_|/_VCimp_]


................................................................................
TEST: Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître.
TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
TEST: Quand j’aurai soif et faim, je m’arrêterai.


# Si suivi du conditionnel ou du subjonctif
__vmode_si_sujet_conditionnel_subjonctif__

    [<start>|,|(]  si     @:(?:Os|M)          @:[SK]¬:(?:G|V0|I)
    [<start>|,|(]  s’     [il|ils|iel|iels]   @:[SK]¬:(?:G|V0|I)
        <<- /vmode/ --1>> _                                                                         && Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.

TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.
TEST: Si j’{{irais}} le faire


__vmode_si_sujet_conditionnel__
................................................................................
TEST: si nous {{aurions}} connu cet homme, on se serait pas trompé                  ->> avions
TEST: si vous {{auriez}} avancé, ce serait différent                                ->> aviez
TEST: s’ils {{auraient}} deviné la solution, ils auraient pas demandé               ->> avaient
TEST: si le patron {{aurait}} pensé la chose, on l’aurait su.                       ->> avait
TEST: si les femmes {{auraient}} parlé, je l’aurais su.                             ->> avaient



# Quand/lorsque/puisque/pourquoi + indicatif
__vmode_quand_lorsque_indicatif__
    [quand|lorsque|lorsqu’|puisque|puisqu’]  @:(?:Os|M)  @:S¬:[GI]
    [quand|lorsque|lorsqu’|puisque|puisqu’]  @:(?:Os|M)  @:V0e.*:S
    [quand|lorsque|lorsqu’|puisque|puisqu’]  $:D¬:R $:N  @:S¬:[GIA]
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":I", \-2)                                             && Après « quand » ou « lorsque » ou « puisque », le verbe ne s’emploie pas au subjonctif mais à l’indicatif.

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

    [<start>|,|(]  pourquoi  @:(?:Os|M)  @:V.*:S¬:[GI]
    [<start>|,|(]  pourquoi  $:D¬:R $:N  @:V.*:S¬:[GIA]
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":I", \-2)                                             && Après « pourquoi », le verbe ne s’emploie pas au subjonctif mais à l’indicatif.

TEST: quand elle {{rencontrât}} son créateur
TEST: lorsqu’il y {{eût}} du grabuge, nous montâmes tous sur le pont.
TEST: pourquoi Mélanie {{vienne}} à cette réception
TEST: quel homme eût abandonné un empire pour une promesse ?
TEST: qui eût abandonné un empire pour une promesse ?
TEST: quels amis ils eussent trompés pour si peu ?


# Dès que + indicatif
__vmode_dès_que__
    dès  [que|qu’]  @:(?:Os|M)  @:S¬:[GI]
    dès  [que|qu’]  $:D¬:R $:N  @:S¬:[GIA]
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":I", \-2)                                             && Après “dès que”, le verbe ne devrait pas être au subjonctif.
#        <<- morph(\1, ":(?:Os|M)", False) and morph(\2, ":K", False)        -2>> =suggVerbMode(@, ":If", \1)    && Ce verbe ne devrait pas être au conditionnel.

#TEST: dès que je le {{verrais}}
TEST: dès qu’il le {{voie}}
TEST: dès que l’homme le {{voie}}
TEST: donnant à entendre qu’il avait l’intention de violer Laura dès qu’il en aurait l’occasion


# indicatif nécessaire
__vmode_sujet_indicatif__
    <start>  [je|j’|tu|il|ils|elle|elles|on|nous|vous|iel|iels]  @:S¬:[GIK]|V0a.*:Sq
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":I", \-2)                                             && Ce verbe ne devrait pas être au subjonctif.




TEST: Il {{ait}} parti.
TEST: Il en {{conclue}} qu’il a eu raison.
TEST: j’en {{aie}} marre
TEST: j’{{aie}} faim


Modified misc/grammalecte.sublime-syntax from [215e477290] to [13b9ac9e2d].

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

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

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







|







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

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

    - match: '\b(?:spell|morph(?:VC|0|2|)|stem|tag|value|space|textarea0?\w*|before0?\w*|after0?\w*|start0?|end0?|word|option|define(?:from|)|select|exclude|setmeta|analyse|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