Grammalecte  Check-in [d2825ab76b]

Overview
Comment:[build][fr] don’t use list as parameter for define()
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | build
Files: files | file ages | folders
SHA3-256: d2825ab76be02a9bf0c45ac01579ec8f6b79366fc8fab1f5a3a7405857dd182f
User & Date: olr on 2020-05-14 18:12:15
Original Comment: [build][fr] don’t list as parameter for define()
Other Links: manifest | tags
Context
2020-05-14
18:18
[core][js] extended JS types: add apostrophes for islower() and isupper() to have same behavior as Python check-in: 0d65245a99 user: olr tags: core, trunk
18:12
[build][fr] don’t use list as parameter for define() check-in: d2825ab76b user: olr tags: build, fr, trunk
17:50
[fr] ajustements et faux positifs check-in: 0ac16f9805 user: olr tags: fr, trunk
Changes

Modified compile_rules.py from [2eab7cde58] to [5777dcbe33].

358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
        elif sAction.startswith('"') and sAction.endswith('"'):
            sAction = sAction[1:-1]
        return [sCondition, cAction, sAction, iGroup]
    if cAction == "=":
        ## disambiguator
        if sAction[0:1] == "=":
            sAction = sAction[1:]
        if "define" in sAction and not re.search(r"define\(dTokenPos, *m\.start.*, \[.*\] *\)", sAction):
            print(f"# Error in action at line {sIdAction}: second argument for define must be a list of strings")
            print(sAction)
        lFUNCTIONS.append(("_d_"+sIdAction, sAction))
        sAction = "_d_"+sIdAction
        return [sCondition, cAction, sAction]
    print(f"# Unknown action at line {sIdAction}")
    return None









<
<
<







358
359
360
361
362
363
364



365
366
367
368
369
370
371
        elif sAction.startswith('"') and sAction.endswith('"'):
            sAction = sAction[1:-1]
        return [sCondition, cAction, sAction, iGroup]
    if cAction == "=":
        ## disambiguator
        if sAction[0:1] == "=":
            sAction = sAction[1:]



        lFUNCTIONS.append(("_d_"+sIdAction, sAction))
        sAction = "_d_"+sIdAction
        return [sCondition, cAction, sAction]
    print(f"# Unknown action at line {sIdAction}")
    return None


Modified compile_rules_graph.py from [a158723aa9] to [449767f106].

380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
                    print(f"\n# Warning in action at line <{sLineId}/{sActionId}>: rewriting with possible token position modified.")
            return [sLineId, sOption, sCondition, cAction, sAction, iStartAction, iEndAction, bCaseSensitivity]
        if cAction in "!/":
            ## tags
            return [sLineId, sOption, sCondition, cAction, sAction, iStartAction, iEndAction]
        if cAction == "=":
            ## disambiguator
            if "define(" in sAction and not re.search(r"define\(\\-?\d+ *, *\[.*\] *\)", sAction):
                print(f"\n# Error in action at line <{sLineId}/{sActionId}>: second argument for <define> must be a list of strings")
                exit()
            sAction = self.createFunction("da", sAction)
            return [sLineId, sOption, sCondition, cAction, sAction]
        print("\n# Unknown action at ", sLineId, sActionId)
        return None

    def storeAction (self, sActionId, aAction):
        "store <aAction> in <self.dActions> avoiding duplicates and return action name"







<
<
<







380
381
382
383
384
385
386



387
388
389
390
391
392
393
                    print(f"\n# Warning in action at line <{sLineId}/{sActionId}>: rewriting with possible token position modified.")
            return [sLineId, sOption, sCondition, cAction, sAction, iStartAction, iEndAction, bCaseSensitivity]
        if cAction in "!/":
            ## tags
            return [sLineId, sOption, sCondition, cAction, sAction, iStartAction, iEndAction]
        if cAction == "=":
            ## disambiguator



            sAction = self.createFunction("da", sAction)
            return [sLineId, sOption, sCondition, cAction, sAction]
        print("\n# Unknown action at ", sLineId, sActionId)
        return None

    def storeAction (self, sActionId, aAction):
        "store <aAction> in <self.dActions> avoiding duplicates and return action name"

Modified gc_core/js/lang_core/gc_engine.js from [62d7087baf] to [942880b931].

1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
....
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
        }
    } else if (lDefault) {
        dTokenPos.get(nPos)["lMorph"] = lDefault;
    }
    return true;
}

function define (dTokenPos, nPos, lMorph) {
    dTokenPos.get(nPos)["lMorph"] = lMorph;
    return true;
}


//// Disambiguation for graph rules

function g_select (oToken, sPattern, lDefault=null) {
................................................................................
        }
    } else if (lDefault) {
        oToken["lMorph"] = lDefault;
    }
    return true;
}

function g_add_morph (oToken, lNewMorph) {
    "Disambiguation: add a morphology to a token"
    let lMorph = (oToken.hasOwnProperty("lMorph")) ? oToken["lMorph"] : _oSpellChecker.getMorph(oToken["sValue"]);
    lMorph.push(...lNewMorph);
    oToken["lMorph"] = lMorph;
    return true;
}

function g_define (oToken, lMorph) {
    // set morphologies of <oToken>, always return true
    oToken["lMorph"] = lMorph;
    return true;
}

function g_define_from (oToken, nLeft=null, nRight=null) {
    let sValue = oToken["sValue"];
    if (nLeft !== null) {
        sValue = (nRight !== null) ? sValue.slice(nLeft, nRight) : sValue.slice(nLeft);







|
|







 







|


|




|

|







1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
....
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
        }
    } else if (lDefault) {
        dTokenPos.get(nPos)["lMorph"] = lDefault;
    }
    return true;
}

function define (dTokenPos, nPos, sMorphs) {
    dTokenPos.get(nPos)["lMorph"] = sMorphs.split("|");
    return true;
}


//// Disambiguation for graph rules

function g_select (oToken, sPattern, lDefault=null) {
................................................................................
        }
    } else if (lDefault) {
        oToken["lMorph"] = lDefault;
    }
    return true;
}

function g_add_morph (oToken, sNewMorph) {
    "Disambiguation: add a morphology to a token"
    let lMorph = (oToken.hasOwnProperty("lMorph")) ? oToken["lMorph"] : _oSpellChecker.getMorph(oToken["sValue"]);
    lMorph.push(...sNewMorph.split("|"));
    oToken["lMorph"] = lMorph;
    return true;
}

function g_define (oToken, sMorphs) {
    // set morphologies of <oToken>, always return true
    oToken["lMorph"] = sMorphs.split("|");
    return true;
}

function g_define_from (oToken, nLeft=null, nRight=null) {
    let sValue = oToken["sValue"];
    if (nLeft !== null) {
        sValue = (nRight !== null) ? sValue.slice(nLeft, nRight) : sValue.slice(nLeft);

Modified gc_core/py/lang_core/gc_engine.py from [43a35f441e] to [bf4b3815a5].

1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
....
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
        if len(lSelect) != len(lMorph):
            dTokenPos[nPos]["lMorph"] = lSelect
    elif lDefault:
        dTokenPos[nPos]["lMorph"] = lDefault
    return True


def define (dTokenPos, nPos, lMorph):
    "Disambiguation: set morphologies of token at <nPos> with <lMorph>"
    if nPos not in dTokenPos:
        echo("Error. There should be a token at this position: ", nPos)
        return True
    dTokenPos[nPos]["lMorph"] = lMorph
    return True


#### Disambiguation for graph rules

def g_select (dToken, sPattern, lDefault=None):
    "Disambiguation: select morphologies for <dToken> according to <sPattern>, always return True"
................................................................................
            dToken["lMorph"] = lSelect
    elif lDefault:
        dToken["lMorph"] = lDefault
    #echo("DA:", dToken["sValue"], dToken["lMorph"])
    return True


def g_add_morph (dToken, lNewMorph):
    "Disambiguation: add a morphology to a token"
    lMorph = dToken["lMorph"]  if "lMorph" in dToken  else _oSpellChecker.getMorph(dToken["sValue"])
    lMorph.extend(lNewMorph)
    dToken["lMorph"] = lMorph
    return True


def g_define (dToken, lMorph):
    "Disambiguation: set morphologies of <dToken>, always return True"
    dToken["lMorph"] = lMorph
    #echo("DA:", dToken["sValue"], lMorph)
    return True


def g_define_from (dToken, nLeft=None, nRight=None):
    "Disambiguation: set morphologies of <dToken> with slicing its value with <nLeft> and <nRight>"
    if nLeft is not None:







|
|



|







 







|


|




|

|







1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
....
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
        if len(lSelect) != len(lMorph):
            dTokenPos[nPos]["lMorph"] = lSelect
    elif lDefault:
        dTokenPos[nPos]["lMorph"] = lDefault
    return True


def define (dTokenPos, nPos, sMorphs):
    "Disambiguation: set morphologies of token at <nPos> with <sMorphs>"
    if nPos not in dTokenPos:
        echo("Error. There should be a token at this position: ", nPos)
        return True
    dTokenPos[nPos]["lMorph"] = sMorphs.split("|")
    return True


#### Disambiguation for graph rules

def g_select (dToken, sPattern, lDefault=None):
    "Disambiguation: select morphologies for <dToken> according to <sPattern>, always return True"
................................................................................
            dToken["lMorph"] = lSelect
    elif lDefault:
        dToken["lMorph"] = lDefault
    #echo("DA:", dToken["sValue"], dToken["lMorph"])
    return True


def g_add_morph (dToken, sNewMorph):
    "Disambiguation: add a morphology to a token"
    lMorph = dToken["lMorph"]  if "lMorph" in dToken  else _oSpellChecker.getMorph(dToken["sValue"])
    lMorph.extend(sNewMorph.split("|"))
    dToken["lMorph"] = lMorph
    return True


def g_define (dToken, sMorphs):
    "Disambiguation: set morphologies of <dToken>, always return True"
    dToken["lMorph"] = sMorphs.split("|")
    #echo("DA:", dToken["sValue"], lMorph)
    return True


def g_define_from (dToken, nLeft=None, nRight=None):
    "Disambiguation: set morphologies of <dToken> with slicing its value with <nLeft> and <nRight>"
    if nLeft is not None:

Modified gc_lang/fr/rules.grx from [fcd3649112] to [e96872c222].

1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
....
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
....
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
....
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
....
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
....
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
....
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
....
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
....
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
.....
13308
13309
13310
13311
13312
13313
13314
13315
13316
13317
13318
13319
13320
13321
13322
.....
14404
14405
14406
14407
14408
14409
14410
14411
14412
14413
14414
14415
14416
14417
14418
14419
14420
14421
14422
14423
14424
14425
14426
.....
14492
14493
14494
14495
14496
14497
14498
14499
14500
14501
14502
14503
14504
14505
14506
.....
14564
14565
14566
14567
14568
14569
14570
14571
14572
14573
14574
14575
14576
14577
14578
.....
14593
14594
14595
14596
14597
14598
14599
14600
14601
14602
14603
14604
14605
14606
14607
14608
14609
14610
14611
14612
14613
14614
14615
14616
.....
15522
15523
15524
15525
15526
15527
15528
15529
15530
15531
15532
15533
15534
15535
15536
.....
15611
15612
15613
15614
15615
15616
15617
15618
15619
15620
15621
15622
15623
15624
15625
.....
15628
15629
15630
15631
15632
15633
15634
15635
15636
15637
15638
15639
15640
15641
15642
.....
15655
15656
15657
15658
15659
15660
15661
15662
15663
15664
15665
15666
15667
15668
15669
.....
15672
15673
15674
15675
15676
15677
15678
15679
15680
15681
15682
15683
15684
15685
15686
.....
15741
15742
15743
15744
15745
15746
15747
15748
15749
15750
15751
15752
15753
15754
15755
15756
15757
15758
15759
15760
15761
15762
15763
15764
15765
15766
15767
.....
15795
15796
15797
15798
15799
15800
15801
15802
15803
15804
15805
15806
15807
15808
15809
15810
15811
15812
15813
15814
15815
15816
15817
15818
15819
15820
15821
.....
16452
16453
16454
16455
16456
16457
16458
16459
16460
16461
16462
16463
16464
16465
16466
TEST: {{3O}} (chiffre avec un O).                                         ->> 30


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

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

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


!!!! Purge des références aux notes                                                               !!

# les références aux notes
__<s>(p_exposants)__
    [¹²³⁴⁵⁶⁷⁸⁹⁰]+
................................................................................
        <<- not morph(<1, ":D.*:p|>[a-z]+ième/") =>> select(\1, ":R")

    passé  [<end>|,|$:R]
        <<- =>> exclude(\1, ":G")

    y compris
        <<- not value(<1, "|n’|j’|tu|t’|m’|s’|") ~>> ␣
        <<- __also__ =>> define(\1, [":G:R"])


__da_puis__
    puis
        <<- not value(<1, "|je|ne|n’|le|la|l’|les|lui|nous|vous|leur|") =>> =exclude(\1, ":V")


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

    [le|l’|mon|notre|votre|leur|mes|tes|ses|nos|vos|leurs|quel|quels|quelle|quelles] point
        <<- =>> select(\2, ":N")


__da_autre_chose_quelque_chose__
    quelque chose
        <<- =>> define(\2, [":N:m:s"])

    autre chose
        <<- not morph(<1, ">entre/|:D") ~>> ␣
        <<- =>> define(\1, [":G"])


__da_groupe_nominal__
    aucun  @:[NA].*:[me]
        <<- =>> exclude(\2, ":V")

    bac + ~^\d\d?$
        <<- ~>> ␣
        <<- =>> define(\1, [":N:e:i"])

    [de|d’]  @:¬:[YD]
        <<- =>> exclude(\2, ":(?:[123][sp]|P)")

    d’ [un|une]  *WORD
        <<- =>> exclude(\3, ":V")

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

    l’ un comme l’ autre
        <<- ~>> ␣
        <<- =>> define(\1, [":LN:m:p"])

    l’ une comme l’ autre
        <<- ~>> ␣
        <<- =>> define(\1, [":LN:f:p"])

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

    les  ~.es$
        <<- not value(<1, "|tu|ne|n’|me|m’|te|t’|se|s’|nous|vous|") and morph(\2, ":V1.*Ip.*:2s") and not tag_before(\1, "_2s_") and not value(>1, "|tu|pas|jamais|")
        =>> exclude(\2, ":V")
................................................................................
        <<- =>> exclude(\2, ":V")

    m’ [dame|sieur]
        <<- ~>> ␣

    nombre  [de|d’|des]  [@:[NA]|<end>|,]
        <<- not morph(<1, ":D") >>>
        <<- morph(<1, ":A.*:[me]:[si]") =>> add_morph(\1, [">nombre/:G:D"])
        <<- __else__ =>> define(\1, [">nombre/:G:D"])

    par  *WORD
        <<- =>> exclude(\2, ":[123][sp]")

    plein  [de|d’]  @:[AN]
        <<- not morph(<1, ":D.*:m|>(?:être|(?:re|)devenir|rester|demeurer|sembler|para[iî]tre)/") =>> =define(\1, [":G"])

    source [de|d’]
        <<- morph(<1, ">(?:être|(?:re|)devenir|rester|demeurer|sembler|para[iî]tre)/") =>> define(\1, [":LV"])

    tout feu ?,¿ tout >flamme
        <<- ~>> ␣
        <<- =>> define(\1, [":A:e:i"])

    très  *WORD
        <<- =>> exclude(\2, ":[123][sp]")

TEST: il s’agit d’{{un}} {{anagramme}}
TEST: nul ne sait qui arriva à ce pauvre Paul surpris par la pluie.
TEST: elle finit par être très fière de son fils.
................................................................................
    le ou la  *WORD
    la ou le  *WORD
        <<- morph(\-1, ":[NA]") ~1:3>> ␣

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

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


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

    n’ importe [qui|quoi|quel|quelle|quels|quelles|où|ou|lequel|laquelle|lesquels|lesquelles]
        <<- ~1:2>> ␣

    [cultural|gender] studies
        <<- ~>> ␣
        <<- =>> define(\1, [":N:f:p"])

    black [>bloc|>block]
    jet set
    machine [learning+s]
    nec plus ultra
    standing >ovation
    star [system+s]
................................................................................
        <<- ~>> ␣

    jusqu’ [au-boutiste+s|au-boutisme+s]
        <<- ~>> ␣

    notre père
        <<- morph(<1, ":D.*:[mp]") ~>> ␣
        <<- __also__ =>> define(\1, [":N:m:i"])

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

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


__fusions_noms_communs_séparés_slah__
    *WORD  /  *WORD
        <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) and morph(\1, ":N") and morph(\-1, ":N") ~>> ␣
        <<- =>> define(\1, [":N:e:i"])


__fusions_noms_propres__
    d’ Alembert
    d’ Estaing
    de Gaulle
    de Broglie
................................................................................
    des Cars
    du Bellay
    du Guesclin
    La Bruyère
    La Fayette
    La Fontaine
        <<- ~>> ␣
        <<- =>> define(\1, [":M2:e:i"])

    cac  40
        <<- ~>> ␣

    France [2|3|4|5|0|O]
        <<- ~>> ␣

    Peugeot  ~^\d0\d\d?$
        <<- ~>> ␣
        <<- =>> define(\1, [":N:e:i"])

    Mai 68
        <<- ~>> ␣
        <<- =>> define(\1, [":N:m:i"])

    ~^[A-ZÀÂÉÈÊÎÔ].  ~^[A-ZÀÂÉÈÊÎÔ].
        <<- analyse_with_next(\1, " ", ":") ~>> ␣
        <<- __else__ and morph(\1, ":M") and morph(\2, ":V", ":[GM]") =>> define(\2, [":M2"])

    Me  ~^[A-ZÀÂÉÈÊÎÔ].
        <<- =>> define(\1, [":T"])
        <<- ~1>> *

    [la|cette]  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Administration|Area|Army|Assocation|Avenue|Chamber|Church|City|Community|Court|Company|Corporation|Cup|Enterprise|Foundation|Fraternity|Gallery|Highway|House|Initiative|League|Library|Mansion|Nation|Navy|Organization|Reserve|Road|River|Sea|Society|Station|Sorority|Tavern|Tower|University|Valley]
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":MP:f:s"])

    [le|au|du|ce]  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Act|Building|Bureau|Casino|Castle|Center|Championship|Club|College|Comity|Consortium|Cottage|Covent|Day|Desert|Forum|Hall|Garden|Hospital|Hostel|Institute|Magazine|Manor|Monastery|Mount|Museum|News|Newspaper|Ocean|Office|Opera|Park|Party|Palace|Post|Restaurant|State|Theatre|Tournament]
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":MP:m:s"])

    the  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Administration|Area|Army|Assocation|Avenue|Chamber|Church|City|Community|Court|Company|Corporation|Cup|Enterprise|Foundation|Fraternity|Gallery|Highway|House|Initiative|League|Library|Mansion|Nation|Navy|Organization|Reserve|Road|River|Sea|Society|Station|Sorority|Tavern|Tower|University|Valley]
    the  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Act|Building|Bureau|Casino|Castle|Center|Championship|Club|College|Comity|Consortium|Cottage|Covent|Day|Desert|Forum|Hall|Garden|Hospital|Hostel|Institute|Magazine|Manor|Monastery|Mount|Museum|News|Newspaper|Ocean|Office|Opera|Park|Party|Palace|Post|Restaurant|State|Theatre|Tournament]
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":MP:e:s"])

    ~^[A-ZÀÂÉÈÊÎÔ]. Airways
        <<- ~>> ␣
        <<- =>> define(\2, [":MP:e:i"])


__immunités__
    il y a
    il n’ y a
        <<- !-1>>

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

__inte_rendez_vous__
    ne [le|la|les] [lui|leur]   rendez-vous
    ne me [le|la|les]           rendez-vous
    ne [lui|leur] en            rendez-vous
    ne [le|la|les|lui|leur]     rendez-vous
    [me|ne|nous|vous|lui]       rendez-vous
        <<- =>> define(\-1, [":VCi1:2p"])
        <<- !-1>>

#   [un|mon|ton|son|ce|mes|tes|ses|leurs] rendez-vous
#   rendez-vous seulement défini comme :N:m:i  dans le dictionnaire

__imp_verbes_composés_impératifs__
    ~\w-l(?:es?|a)-(?:[mt]oi|nous|leur)$
................................................................................

    in anima vili
    in cauda venenum
    in vino veritas
    sursum corda
    sic transit gloria mundi
        <<- ~>> ␣
        <<- =>> =define(\1, [":LP"])


__purge_locutions_incises__
    [<start>|,|(] [oui|non] [<end>|,|)]
    [<start>|,|(] ?oui¿ ou non [<end>|,|)]
    [<start>|,|(] et non l’ inverse [<end>|,|)]
    [<start>|,|(] fait remarquable [<end>|,|)]
................................................................................
    par l’ entremise                                                                                                    [de|du|d’|des]
    par manque                                                                                                          [de|d’]
    par habitude                                                                                                        [de|du|d’|des]
    sans distinction                                                                                                    [de|d’]
    sous la houlette                                                                                                    [de|du|d’|des]
    sous forme                                                                                                          [de|d’]
        <<- ~1:-2>> ␣
        <<- =>> define(\1, [":G:R:LR"])

    tout au [bout|long] [de|du|d’|des]
        <<- not morph(<1, ":R") ~1>> *

    à travers $:D
    à travers >différent
        <<- ~1:2>> ␣
        <<- =>> define(\1, [":G:R:LR"])

    ainsi
        <<- not value(>1, "|que|qu’|") ~>> *

    au moins  @:[DB]
        <<- ~1:2>> *

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

    l’ étrange impression [que|qu’]
    la [nette|bizarre] impression [que|qu’]
        <<- ~2:3>> _

    le pour et le contre
        <<- ~>> ␣
        <<- =>> define(\1, [":LN:m:p"])

    le [pressentiment|sentiment] [que|qu’]
        <<- ~1>> _

    ou bien
        <<- ~2>> *

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

    [les|des]   >numéro  [un|*NUM|$:B]  et  [*NUM|$:B]
        <<- ~3:0>> *

    la  >numéro  un
    la  >numéro  $:B
    la  >numéro  *NUM
        <<- =>> define(\2, [">numéro/:N:f:s"])
        <<- ~3>> *

    le  numéro  un  @:¬:N:[em]:[is]
        <<- ~3>> *

    >numéro  $:B
    >numéro  *NUM
................................................................................
TEST: cette femme-là {{étaient}} partout.


__simplification_des_nombres__
    [vingt|trente|quarante|cinquante|soixante|soixante-dix|septante|quatre-vingt|octante|huitante|quatre-vingt-dix|nonante|mille] et [un|une|onze]
        <<- ~>> \1-et-\3||
        <<- ~2:3>> *
        <<- =>> define(\1, [":B:e:p"])

    [deux|trois|quatre|cinq|six|sept|huit|neuf|onze|douze|treize|quatorze|quinze|seize|dix-sept|dix-huit|dix-neuf]  cents  @:[NAQ].*:[pi]¬:(?:G|3p)
        <<- ~1:2>> ␣
        <<- =>> define(\1, [":B:e:p"])

    [deux|trois|quatre|cinq|six|sept|huit|neuf] ?cent¿ mille
    cent mille
        <<- ~>> ␣
        <<- =>> define(\1, [":B:e:p"])


__purge_des_nombres__
    [les|des|ces|mes|tes|ses|nos|vos|leurs]  quelque  $:B:e @:[NA].*:[pi]¬:(?:G|3p)
    [les|des|ces|mes|tes|ses|nos|vos|leurs]  quelque  *NUM  @:[NA].*:[pi]¬:(?:G|3p)
        <<- ~2:3>> *

................................................................................
    noir    sur blanc
    rose    [bonbon|chair|corail]
    rouge   [anglais|brique|cardinal|carmin|cerise|cochenille|coquelicot|cuivré|écarlate|feu|fraise|grenat|groseille|incarnat|indien|rubis|sang|sanguin|tomate|vermeille|vermillon]
    vert    [bouteille|céladon|émeraude|épinard|impérial|lichen|olive|perroquet|pistache|poireau|pomme|prairie|printemps|sapin|sauge|tilleul]
    couleur sable
        <<- morph(<1, ":[NA]", ":D") ~>> *
        <<- __else__ and morph(<1, ":D|>(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)") ~>> ␣
        <<- __also__ =>> define(\1, [":A:e:i"])


__simplification_noms_propres__
    don Juan
        <<- ~1>> *

    >cocktail Molotov
................................................................................
    [>être|>devenir|>rester] papa et maman
    [>être|>devenir|>rester] partie [intégrante|prenante]
    [>être|>devenir|>rester] peine perdue
    [>être|>devenir|>rester] pieds et poings liés
    [>être|>devenir|>rester] pieds nus
    [>être|>devenir|>rester] père et mère
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":LV"])

    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] [bon|meilleur] marché
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] cousin et cousine
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] de passage
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] frère et sœur
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] mari et femme
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] mission impossible
................................................................................
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] partie [intégrante|prenante]
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] peine perdue
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] pieds et poings liés
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] pieds nus
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] père et mère
        <<- ~2>> *
        <<- ~3:0>> ␣
        <<- =>> define(\3, [":LV"])

    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ avant tout
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ du moins
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ en partie
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ somme toute
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ sous peu
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
................................................................................
    /_VCint_ papa et maman
    /_VCint_ partie [intégrante|prenante]
    /_VCint_ peine perdue
    /_VCint_ pieds et poings liés
    /_VCint_ pieds nus
    /_VCint_ père et mère
        <<- morphVC(\1, ">(?:être|devenir|rester)") ~2:0>> ␣
        <<- __also__ =>> define(\2, [":LV"])

    /_VCint_ [pas|jamais|plus|guère|point] [bon|meilleur] marché
    /_VCint_ [pas|jamais|plus|guère|point] cousin et cousine
    /_VCint_ [pas|jamais|plus|guère|point] de passage
    /_VCint_ [pas|jamais|plus|guère|point] frère et sœur
    /_VCint_ [pas|jamais|plus|guère|point] mari et femme
    /_VCint_ [pas|jamais|plus|guère|point] mission impossible
................................................................................
    /_VCint_ [pas|jamais|plus|guère|point] partie [intégrante|prenante]
    /_VCint_ [pas|jamais|plus|guère|point] peine perdue
    /_VCint_ [pas|jamais|plus|guère|point] pieds et poings liés
    /_VCint_ [pas|jamais|plus|guère|point] pieds nus
    /_VCint_ [pas|jamais|plus|guère|point] père et mère
        <<- morphVC(\1, ">(?:être|devenir|rester)") ~2>> *
        <<- __also__ ~3:0>> ␣
        <<- __also__ =>> define(\3, [":LV"])

    /_VCint_ ?[pas|jamais|plus|guère|point]¿ avant tout
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ du moins
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ en partie
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ somme toute
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ sous peu
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
................................................................................
    >avoir  bon [dos|fond]
    >avoir  bon pied ?,¿ bon œil
    >avoir  carte blanche
    >avoir  forme [humaine|animale]
    >avoir  partie [gagnée|liée]
    >avoir  voix au chapitre
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":LV"])

    >avoir  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
    >avoir  [pas|jamais|plus|guère|point]  bon [dos|fond]
    >avoir  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
    >avoir  [pas|jamais|plus|guère|point]  carte blanche
    >avoir  [pas|jamais|plus|guère|point]  forme [humaine|animale]
    >avoir  [pas|jamais|plus|guère|point]  gain de cause
    >avoir  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
    >avoir  [pas|jamais|plus|guère|point]  quartier libre
    >avoir  [pas|jamais|plus|guère|point]  voix au chapitre
        <<- ~3:0>> ␣
        <<- =>> define(\3, [":LV"])

    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B:e:p  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B:e:p  @:(?:Q|V1.*:Y)
        <<- ~2:-2>> *

    n’  >avoir  que  $:Q
        <<- ~3>> *
................................................................................
    /_VCint_  bon [dos|fond]
    /_VCint_  bon pied ?,¿ bon œil
    /_VCint_  carte blanche
    /_VCint_  forme [humaine|animale]
    /_VCint_  partie [gagnée|liée]
    /_VCint_  voix au chapitre
        <<- morphVC(\1, ":V0a") ~2:0>> ␣
        <<- __also__ =>> define(\2, [":LV"])

    /_VCint_  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
    /_VCint_  [pas|jamais|plus|guère|point]  bon [dos|fond]
    /_VCint_  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
    /_VCint_  [pas|jamais|plus|guère|point]  carte blanche
    /_VCint_  [pas|jamais|plus|guère|point]  forme [humaine|animale]
    /_VCint_  [pas|jamais|plus|guère|point]  gain de cause
    /_VCint_  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
    /_VCint_  [pas|jamais|plus|guère|point]  quartier libre
    /_VCint_  [pas|jamais|plus|guère|point]  voix au chapitre
        <<- morphVC(\1, ":V0a") ~3:0>> ␣
        <<- __also__ =>> define(\3, [":LV"])

    /_VCint_  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B:e:p  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
    /_VCint_  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B:e:p  @:(?:Q|V1.*:Y)
        <<- morphVC(\1, ":V0a") ~2:-2>> *


__purge_après_verbe__
................................................................................
    >trier sur le volet
    >trouver refuge
    >vendre à perte
    >venir à bout
    [>venir|>revenir] je [ne|n’] sais ?pas¿ ?trop¿ d’ où
    [>venir|>revenir] on [ne|n’] sait ?pas¿ ?trop¿ d’ où
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":LV"])


__sgpl_faire_plaisir__
    >faire plaisirs
        <<- /sgpl/ --1>> plaisir        && Faire plaisir : dans cette locution, “plaisir” doit être au singulier.
        <<- ~-1>> *








|



|







 







|







 







|



|








|












|



|







 







|
|





|


|



|







 







|









|






|







 







|







 







|







 







|









|



|



|


|




|



|




|



|







 







|







 







|







 







|







|







 







|







 







|







 







|



|




|







 







|







 







|







 







|







 







|







 







|







 







|











|







 







|











|







 







|







1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
....
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
....
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
....
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
....
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
....
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
....
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
....
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
....
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
.....
13308
13309
13310
13311
13312
13313
13314
13315
13316
13317
13318
13319
13320
13321
13322
.....
14404
14405
14406
14407
14408
14409
14410
14411
14412
14413
14414
14415
14416
14417
14418
14419
14420
14421
14422
14423
14424
14425
14426
.....
14492
14493
14494
14495
14496
14497
14498
14499
14500
14501
14502
14503
14504
14505
14506
.....
14564
14565
14566
14567
14568
14569
14570
14571
14572
14573
14574
14575
14576
14577
14578
.....
14593
14594
14595
14596
14597
14598
14599
14600
14601
14602
14603
14604
14605
14606
14607
14608
14609
14610
14611
14612
14613
14614
14615
14616
.....
15522
15523
15524
15525
15526
15527
15528
15529
15530
15531
15532
15533
15534
15535
15536
.....
15611
15612
15613
15614
15615
15616
15617
15618
15619
15620
15621
15622
15623
15624
15625
.....
15628
15629
15630
15631
15632
15633
15634
15635
15636
15637
15638
15639
15640
15641
15642
.....
15655
15656
15657
15658
15659
15660
15661
15662
15663
15664
15665
15666
15667
15668
15669
.....
15672
15673
15674
15675
15676
15677
15678
15679
15680
15681
15682
15683
15684
15685
15686
.....
15741
15742
15743
15744
15745
15746
15747
15748
15749
15750
15751
15752
15753
15754
15755
15756
15757
15758
15759
15760
15761
15762
15763
15764
15765
15766
15767
.....
15795
15796
15797
15798
15799
15800
15801
15802
15803
15804
15805
15806
15807
15808
15809
15810
15811
15812
15813
15814
15815
15816
15817
15818
15819
15820
15821
.....
16452
16453
16454
16455
16456
16457
16458
16459
16460
16461
16462
16463
16464
16465
16466
TEST: {{3O}} (chiffre avec un O).                                         ->> 30


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

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

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


!!!! Purge des références aux notes                                                               !!

# les références aux notes
__<s>(p_exposants)__
    [¹²³⁴⁵⁶⁷⁸⁹⁰]+
................................................................................
        <<- not morph(<1, ":D.*:p|>[a-z]+ième/") =>> select(\1, ":R")

    passé  [<end>|,|$:R]
        <<- =>> exclude(\1, ":G")

    y compris
        <<- not value(<1, "|n’|j’|tu|t’|m’|s’|") ~>> ␣
        <<- __also__ =>> define(\1, ":G:R")


__da_puis__
    puis
        <<- not value(<1, "|je|ne|n’|le|la|l’|les|lui|nous|vous|leur|") =>> =exclude(\1, ":V")


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

    [le|l’|mon|notre|votre|leur|mes|tes|ses|nos|vos|leurs|quel|quels|quelle|quelles] point
        <<- =>> select(\2, ":N")


__da_autre_chose_quelque_chose__
    quelque chose
        <<- =>> define(\2, ":N:m:s")

    autre chose
        <<- not morph(<1, ">entre/|:D") ~>> ␣
        <<- =>> define(\1, ":G")


__da_groupe_nominal__
    aucun  @:[NA].*:[me]
        <<- =>> exclude(\2, ":V")

    bac + ~^\d\d?$
        <<- ~>> ␣
        <<- =>> define(\1, ":N:e:i")

    [de|d’]  @:¬:[YD]
        <<- =>> exclude(\2, ":(?:[123][sp]|P)")

    d’ [un|une]  *WORD
        <<- =>> exclude(\3, ":V")

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

    l’ un comme l’ autre
        <<- ~>> ␣
        <<- =>> define(\1, ":LN:m:p")

    l’ une comme l’ autre
        <<- ~>> ␣
        <<- =>> define(\1, ":LN:f:p")

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

    les  ~.es$
        <<- not value(<1, "|tu|ne|n’|me|m’|te|t’|se|s’|nous|vous|") and morph(\2, ":V1.*Ip.*:2s") and not tag_before(\1, "_2s_") and not value(>1, "|tu|pas|jamais|")
        =>> exclude(\2, ":V")
................................................................................
        <<- =>> exclude(\2, ":V")

    m’ [dame|sieur]
        <<- ~>> ␣

    nombre  [de|d’|des]  [@:[NA]|<end>|,]
        <<- not morph(<1, ":D") >>>
        <<- morph(<1, ":A.*:[me]:[si]") =>> add_morph(\1, ">nombre/:G:D")
        <<- __else__ =>> define(\1, ">nombre/:G:D")

    par  *WORD
        <<- =>> exclude(\2, ":[123][sp]")

    plein  [de|d’]  @:[AN]
        <<- not morph(<1, ":D.*:m|>(?:être|(?:re|)devenir|rester|demeurer|sembler|para[iî]tre)/") =>> =define(\1, ":G")

    source [de|d’]
        <<- morph(<1, ">(?:être|(?:re|)devenir|rester|demeurer|sembler|para[iî]tre)/") =>> define(\1, ":LV")

    tout feu ?,¿ tout >flamme
        <<- ~>> ␣
        <<- =>> define(\1, ":A:e:i")

    très  *WORD
        <<- =>> exclude(\2, ":[123][sp]")

TEST: il s’agit d’{{un}} {{anagramme}}
TEST: nul ne sait qui arriva à ce pauvre Paul surpris par la pluie.
TEST: elle finit par être très fière de son fils.
................................................................................
    le ou la  *WORD
    la ou le  *WORD
        <<- morph(\-1, ":[NA]") ~1:3>> ␣

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

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


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

    n’ importe [qui|quoi|quel|quelle|quels|quelles|où|ou|lequel|laquelle|lesquels|lesquelles]
        <<- ~1:2>> ␣

    [cultural|gender] studies
        <<- ~>> ␣
        <<- =>> define(\1, ":N:f:p")

    black [>bloc|>block]
    jet set
    machine [learning+s]
    nec plus ultra
    standing >ovation
    star [system+s]
................................................................................
        <<- ~>> ␣

    jusqu’ [au-boutiste+s|au-boutisme+s]
        <<- ~>> ␣

    notre père
        <<- morph(<1, ":D.*:[mp]") ~>> ␣
        <<- __also__ =>> define(\1, ":N:m:i")

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

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


__fusions_noms_communs_séparés_slah__
    *WORD  /  *WORD
        <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) and morph(\1, ":N") and morph(\-1, ":N") ~>> ␣
        <<- =>> define(\1, ":N:e:i")


__fusions_noms_propres__
    d’ Alembert
    d’ Estaing
    de Gaulle
    de Broglie
................................................................................
    des Cars
    du Bellay
    du Guesclin
    La Bruyère
    La Fayette
    La Fontaine
        <<- ~>> ␣
        <<- =>> define(\1, ":M2:e:i")

    cac  40
        <<- ~>> ␣

    France [2|3|4|5|0|O]
        <<- ~>> ␣

    Peugeot  ~^\d0\d\d?$
        <<- ~>> ␣
        <<- =>> define(\1, ":N:e:i")

    Mai 68
        <<- ~>> ␣
        <<- =>> define(\1, ":N:m:i")

    ~^[A-ZÀÂÉÈÊÎÔ].  ~^[A-ZÀÂÉÈÊÎÔ].
        <<- analyse_with_next(\1, " ", ":") ~>> ␣
        <<- __else__ and morph(\1, ":M") and morph(\2, ":V", ":[GM]") =>> define(\2, ":M2")

    Me  ~^[A-ZÀÂÉÈÊÎÔ].
        <<- =>> define(\1, ":T")
        <<- ~1>> *

    [la|cette]  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Administration|Area|Army|Assocation|Avenue|Chamber|Church|City|Community|Court|Company|Corporation|Cup|Enterprise|Foundation|Fraternity|Gallery|Highway|House|Initiative|League|Library|Mansion|Nation|Navy|Organization|Reserve|Road|River|Sea|Society|Station|Sorority|Tavern|Tower|University|Valley]
        <<- ~2:0>> ␣
        <<- =>> define(\2, ":MP:f:s")

    [le|au|du|ce]  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Act|Building|Bureau|Casino|Castle|Center|Championship|Club|College|Comity|Consortium|Cottage|Covent|Day|Desert|Forum|Hall|Garden|Hospital|Hostel|Institute|Magazine|Manor|Monastery|Mount|Museum|News|Newspaper|Ocean|Office|Opera|Park|Party|Palace|Post|Restaurant|State|Theatre|Tournament]
        <<- ~2:0>> ␣
        <<- =>> define(\2, ":MP:m:s")

    the  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Administration|Area|Army|Assocation|Avenue|Chamber|Church|City|Community|Court|Company|Corporation|Cup|Enterprise|Foundation|Fraternity|Gallery|Highway|House|Initiative|League|Library|Mansion|Nation|Navy|Organization|Reserve|Road|River|Sea|Society|Station|Sorority|Tavern|Tower|University|Valley]
    the  ~^[A-ZÀÂÉÈÊÎÔ].  ?~^[A-ZÀÂÉÈÊÎÔ].¿  ?~^[A-ZÀÂÉÈÊÎÔ].¿  [Act|Building|Bureau|Casino|Castle|Center|Championship|Club|College|Comity|Consortium|Cottage|Covent|Day|Desert|Forum|Hall|Garden|Hospital|Hostel|Institute|Magazine|Manor|Monastery|Mount|Museum|News|Newspaper|Ocean|Office|Opera|Park|Party|Palace|Post|Restaurant|State|Theatre|Tournament]
        <<- ~2:0>> ␣
        <<- =>> define(\2, ":MP:e:s")

    ~^[A-ZÀÂÉÈÊÎÔ]. Airways
        <<- ~>> ␣
        <<- =>> define(\2, ":MP:e:i")


__immunités__
    il y a
    il n’ y a
        <<- !-1>>

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

__inte_rendez_vous__
    ne [le|la|les] [lui|leur]   rendez-vous
    ne me [le|la|les]           rendez-vous
    ne [lui|leur] en            rendez-vous
    ne [le|la|les|lui|leur]     rendez-vous
    [me|ne|nous|vous|lui]       rendez-vous
        <<- =>> define(\-1, ":VCi1:2p")
        <<- !-1>>

#   [un|mon|ton|son|ce|mes|tes|ses|leurs] rendez-vous
#   rendez-vous seulement défini comme :N:m:i  dans le dictionnaire

__imp_verbes_composés_impératifs__
    ~\w-l(?:es?|a)-(?:[mt]oi|nous|leur)$
................................................................................

    in anima vili
    in cauda venenum
    in vino veritas
    sursum corda
    sic transit gloria mundi
        <<- ~>> ␣
        <<- =>> =define(\1, ":LP")


__purge_locutions_incises__
    [<start>|,|(] [oui|non] [<end>|,|)]
    [<start>|,|(] ?oui¿ ou non [<end>|,|)]
    [<start>|,|(] et non l’ inverse [<end>|,|)]
    [<start>|,|(] fait remarquable [<end>|,|)]
................................................................................
    par l’ entremise                                                                                                    [de|du|d’|des]
    par manque                                                                                                          [de|d’]
    par habitude                                                                                                        [de|du|d’|des]
    sans distinction                                                                                                    [de|d’]
    sous la houlette                                                                                                    [de|du|d’|des]
    sous forme                                                                                                          [de|d’]
        <<- ~1:-2>> ␣
        <<- =>> define(\1, ":G:R:LR")

    tout au [bout|long] [de|du|d’|des]
        <<- not morph(<1, ":R") ~1>> *

    à travers $:D
    à travers >différent
        <<- ~1:2>> ␣
        <<- =>> define(\1, ":G:R:LR")

    ainsi
        <<- not value(>1, "|que|qu’|") ~>> *

    au moins  @:[DB]
        <<- ~1:2>> *

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

    l’ étrange impression [que|qu’]
    la [nette|bizarre] impression [que|qu’]
        <<- ~2:3>> _

    le pour et le contre
        <<- ~>> ␣
        <<- =>> define(\1, ":LN:m:p")

    le [pressentiment|sentiment] [que|qu’]
        <<- ~1>> _

    ou bien
        <<- ~2>> *

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

    [les|des]   >numéro  [un|*NUM|$:B]  et  [*NUM|$:B]
        <<- ~3:0>> *

    la  >numéro  un
    la  >numéro  $:B
    la  >numéro  *NUM
        <<- =>> define(\2, ">numéro/:N:f:s")
        <<- ~3>> *

    le  numéro  un  @:¬:N:[em]:[is]
        <<- ~3>> *

    >numéro  $:B
    >numéro  *NUM
................................................................................
TEST: cette femme-là {{étaient}} partout.


__simplification_des_nombres__
    [vingt|trente|quarante|cinquante|soixante|soixante-dix|septante|quatre-vingt|octante|huitante|quatre-vingt-dix|nonante|mille] et [un|une|onze]
        <<- ~>> \1-et-\3||
        <<- ~2:3>> *
        <<- =>> define(\1, ":B:e:p")

    [deux|trois|quatre|cinq|six|sept|huit|neuf|onze|douze|treize|quatorze|quinze|seize|dix-sept|dix-huit|dix-neuf]  cents  @:[NAQ].*:[pi]¬:(?:G|3p)
        <<- ~1:2>> ␣
        <<- =>> define(\1, ":B:e:p")

    [deux|trois|quatre|cinq|six|sept|huit|neuf] ?cent¿ mille
    cent mille
        <<- ~>> ␣
        <<- =>> define(\1, ":B:e:p")


__purge_des_nombres__
    [les|des|ces|mes|tes|ses|nos|vos|leurs]  quelque  $:B:e @:[NA].*:[pi]¬:(?:G|3p)
    [les|des|ces|mes|tes|ses|nos|vos|leurs]  quelque  *NUM  @:[NA].*:[pi]¬:(?:G|3p)
        <<- ~2:3>> *

................................................................................
    noir    sur blanc
    rose    [bonbon|chair|corail]
    rouge   [anglais|brique|cardinal|carmin|cerise|cochenille|coquelicot|cuivré|écarlate|feu|fraise|grenat|groseille|incarnat|indien|rubis|sang|sanguin|tomate|vermeille|vermillon]
    vert    [bouteille|céladon|émeraude|épinard|impérial|lichen|olive|perroquet|pistache|poireau|pomme|prairie|printemps|sapin|sauge|tilleul]
    couleur sable
        <<- morph(<1, ":[NA]", ":D") ~>> *
        <<- __else__ and morph(<1, ":D|>(?:être|devenir|redevenir|rester|sembler|demeurer|para[îi]tre)") ~>> ␣
        <<- __also__ =>> define(\1, ":A:e:i")


__simplification_noms_propres__
    don Juan
        <<- ~1>> *

    >cocktail Molotov
................................................................................
    [>être|>devenir|>rester] papa et maman
    [>être|>devenir|>rester] partie [intégrante|prenante]
    [>être|>devenir|>rester] peine perdue
    [>être|>devenir|>rester] pieds et poings liés
    [>être|>devenir|>rester] pieds nus
    [>être|>devenir|>rester] père et mère
        <<- ~2:0>> ␣
        <<- =>> define(\2, ":LV")

    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] [bon|meilleur] marché
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] cousin et cousine
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] de passage
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] frère et sœur
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] mari et femme
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] mission impossible
................................................................................
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] partie [intégrante|prenante]
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] peine perdue
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] pieds et poings liés
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] pieds nus
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point] père et mère
        <<- ~2>> *
        <<- ~3:0>> ␣
        <<- =>> define(\3, ":LV")

    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ avant tout
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ du moins
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ en partie
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ somme toute
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ sous peu
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
................................................................................
    /_VCint_ papa et maman
    /_VCint_ partie [intégrante|prenante]
    /_VCint_ peine perdue
    /_VCint_ pieds et poings liés
    /_VCint_ pieds nus
    /_VCint_ père et mère
        <<- morphVC(\1, ">(?:être|devenir|rester)") ~2:0>> ␣
        <<- __also__ =>> define(\2, ":LV")

    /_VCint_ [pas|jamais|plus|guère|point] [bon|meilleur] marché
    /_VCint_ [pas|jamais|plus|guère|point] cousin et cousine
    /_VCint_ [pas|jamais|plus|guère|point] de passage
    /_VCint_ [pas|jamais|plus|guère|point] frère et sœur
    /_VCint_ [pas|jamais|plus|guère|point] mari et femme
    /_VCint_ [pas|jamais|plus|guère|point] mission impossible
................................................................................
    /_VCint_ [pas|jamais|plus|guère|point] partie [intégrante|prenante]
    /_VCint_ [pas|jamais|plus|guère|point] peine perdue
    /_VCint_ [pas|jamais|plus|guère|point] pieds et poings liés
    /_VCint_ [pas|jamais|plus|guère|point] pieds nus
    /_VCint_ [pas|jamais|plus|guère|point] père et mère
        <<- morphVC(\1, ">(?:être|devenir|rester)") ~2>> *
        <<- __also__ ~3:0>> ␣
        <<- __also__ =>> define(\3, ":LV")

    /_VCint_ ?[pas|jamais|plus|guère|point]¿ avant tout
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ du moins
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ en partie
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ somme toute
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ sous peu
    /_VCint_ ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
................................................................................
    >avoir  bon [dos|fond]
    >avoir  bon pied ?,¿ bon œil
    >avoir  carte blanche
    >avoir  forme [humaine|animale]
    >avoir  partie [gagnée|liée]
    >avoir  voix au chapitre
        <<- ~2:0>> ␣
        <<- =>> define(\2, ":LV")

    >avoir  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
    >avoir  [pas|jamais|plus|guère|point]  bon [dos|fond]
    >avoir  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
    >avoir  [pas|jamais|plus|guère|point]  carte blanche
    >avoir  [pas|jamais|plus|guère|point]  forme [humaine|animale]
    >avoir  [pas|jamais|plus|guère|point]  gain de cause
    >avoir  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
    >avoir  [pas|jamais|plus|guère|point]  quartier libre
    >avoir  [pas|jamais|plus|guère|point]  voix au chapitre
        <<- ~3:0>> ␣
        <<- =>> define(\3, ":LV")

    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B:e:p  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B:e:p  @:(?:Q|V1.*:Y)
        <<- ~2:-2>> *

    n’  >avoir  que  $:Q
        <<- ~3>> *
................................................................................
    /_VCint_  bon [dos|fond]
    /_VCint_  bon pied ?,¿ bon œil
    /_VCint_  carte blanche
    /_VCint_  forme [humaine|animale]
    /_VCint_  partie [gagnée|liée]
    /_VCint_  voix au chapitre
        <<- morphVC(\1, ":V0a") ~2:0>> ␣
        <<- __also__ =>> define(\2, ":LV")

    /_VCint_  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
    /_VCint_  [pas|jamais|plus|guère|point]  bon [dos|fond]
    /_VCint_  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
    /_VCint_  [pas|jamais|plus|guère|point]  carte blanche
    /_VCint_  [pas|jamais|plus|guère|point]  forme [humaine|animale]
    /_VCint_  [pas|jamais|plus|guère|point]  gain de cause
    /_VCint_  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
    /_VCint_  [pas|jamais|plus|guère|point]  quartier libre
    /_VCint_  [pas|jamais|plus|guère|point]  voix au chapitre
        <<- morphVC(\1, ":V0a") ~3:0>> ␣
        <<- __also__ =>> define(\3, ":LV")

    /_VCint_  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B:e:p  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|pitié|soif|vent]
    /_VCint_  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B:e:p  @:(?:Q|V1.*:Y)
        <<- morphVC(\1, ":V0a") ~2:-2>> *


__purge_après_verbe__
................................................................................
    >trier sur le volet
    >trouver refuge
    >vendre à perte
    >venir à bout
    [>venir|>revenir] je [ne|n’] sais ?pas¿ ?trop¿ d’ où
    [>venir|>revenir] on [ne|n’] sait ?pas¿ ?trop¿ d’ où
        <<- ~2:0>> ␣
        <<- =>> define(\2, ":LV")


__sgpl_faire_plaisir__
    >faire plaisirs
        <<- /sgpl/ --1>> plaisir        && Faire plaisir : dans cette locution, “plaisir” doit être au singulier.
        <<- ~-1>> *