Grammalecte  Check-in [cd71e9c073]

Overview
Comment:merge trunk (from previous checkin: [fr] ajustements, +chimie activée par défaut)
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | gcerw
Files: files | file ages | folders
SHA3-256: cd71e9c073c9a37ff57a0904938894a960c84a89ed327aace8ac8bfede831984
User & Date: olr on 2020-04-17 17:46:08
Other Links: branch diff | manifest | tags
Context
2020-04-17
18:02
cherrypick from trunk: [fr] ajustements check-in: 91457464b6 user: olr tags: gcerw
17:46
merge trunk (from previous checkin: [fr] ajustements, +chimie activée par défaut) check-in: cd71e9c073 user: olr tags: gcerw
17:43
merge trunk (from previous checkin: [fx] gc panel: modify message appearence) check-in: f0c88ae2c6 user: olr tags: gcerw
09:19
[fr] ajustements, +chimie activée par défaut check-in: 503b6064df user: olr tags: fr, trunk
Changes

Modified compile_rules.py from [5ad409424e] to [ed8f69534c].

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
..
53
54
55
56
57
58
59

60
61
62
63
64
65
66
...
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
...
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178

179
180
181
182
183
184
185
...
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
...
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640


dDEFINITIONS = {}
dDECLENSIONS = {}
lFUNCTIONS = []

aRULESET = set()     # set of rule-ids to check if there is several rules with the same id
nRULEWITHOUTNAME = 0

dJSREGEXES = {}

sWORDLIMITLEFT  = r"(?<![\w.,–-])"   # r"(?<![-.,—])\b"  seems slower
sWORDLIMITRIGHT = r"(?![\w–-])"      # r"\b(?!-—)"       seems slower


................................................................................
    return dColorType


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 = 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)
................................................................................
        print(sRegex)
    return 0


def createRule (s, nIdLine, sLang, bParagraph, dOptPriority):
    "returns rule as list [option name, regex, bCaseInsensitive, identifier, list of actions]"
    global dJSREGEXES
    global nRULEWITHOUTNAME

    sLineId = "#" + str(nIdLine) + ("p" if bParagraph else "s")
    sRuleId = sLineId

    #### GRAPH CALL
    if s.startswith("@@@@"):
        if bParagraph:
................................................................................
    #### OPTIONS
    sOption = False         # False or [a-z0-9]+ name
    nPriority = 4           # Default is 4, value must be between 0 and 9
    tGroups = None          # code for groups positioning (only useful for JavaScript)
    cCaseMode = 'i'         # i: case insensitive,  s: case sensitive,  u: uppercasing allowed
    cWordLimitLeft = '['    # [: word limit, <: no specific limit
    cWordLimitRight = ']'   # ]: word limit, >: no specific limit
    m = re.match("^__(?P<borders_and_case>[\\[<]\\w[\\]>])(?P<option>/[a-zA-Z0-9]+|)(?P<ruleid>\\(\\w+\\)|)(?P<priority>![0-9]|)__ *", s)
    if m:
        cWordLimitLeft = m.group('borders_and_case')[0]
        cCaseMode = m.group('borders_and_case')[1]
        cWordLimitRight = m.group('borders_and_case')[2]
        sOption = m.group('option')[1:]  if m.group('option')  else False
        if m.group('ruleid'):
            sRuleId =  m.group('ruleid')[1:-1]
            if sRuleId in aRULESET:
                print("# Error. Several rules have the same id: " + sRuleId)
                exit()
            aRULESET.add(sRuleId)
        else:
            nRULEWITHOUTNAME += 1
        nPriority = dOptPriority.get(sOption, 4)
        if m.group('priority'):
            nPriority = int(m.group('priority')[1:])
        s = s[m.end(0):]
    else:
        print("# Warning. No option defined at line: " + sLineId)


    #### REGEX TRIGGER
    i = s.find(" <<-")
    if i == -1:
        print("# Error: no condition at line " + sLineId)
        return None
    sRegex = s[:i].strip()
................................................................................
            pass
        elif bGraph:
            lGraphRule.append([i, sLine])
        # Regex rules
        elif re.match("[  \t]*$", sLine):
            # empty line
            pass
        elif sLine.startswith(("    ", "\t")):
            # rule (continuation)
            lRuleLine[-1][1] += " " + sLine.strip()
        else:
            # new rule
            lRuleLine.append([i, sLine.strip()])

    # generating options files
................................................................................
        # JavaScript
        sJSCallables += "    {}: function ({})".format(sFuncName, sParams) + " {\n"
        sJSCallables += "        return " + jsconv.py2js(sReturn) + ";\n"
        sJSCallables += "    },\n"

    displayStats(lParagraphRules, lSentenceRules)

    print("Unnamed rules: " + str(nRULEWITHOUTNAME))

    dVars = {
        "fBuildTime": fBuildTime,
        "callables": sPyCallables,
        "callablesJS": sJSCallables,
        "gctests": sGCTests,
        "gctestsJS": sGCTestsJS,
        "paragraph_rules": mergeRulesByOption(lParagraphRules),







<







 







>







 







<







 







|





<
|
|
|
|
|
<
<





|
>







 







|







 







<
<







14
15
16
17
18
19
20

21
22
23
24
25
26
27
..
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
...
133
134
135
136
137
138
139

140
141
142
143
144
145
146
...
151
152
153
154
155
156
157
158
159
160
161
162
163

164
165
166
167
168


169
170
171
172
173
174
175
176
177
178
179
180
181
182
...
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
...
622
623
624
625
626
627
628


629
630
631
632
633
634
635


dDEFINITIONS = {}
dDECLENSIONS = {}
lFUNCTIONS = []

aRULESET = set()     # set of rule-ids to check if there is several rules with the same id


dJSREGEXES = {}

sWORDLIMITLEFT  = r"(?<![\w.,–-])"   # r"(?<![-.,—])\b"  seems slower
sWORDLIMITRIGHT = r"(?![\w–-])"      # r"\b(?!-—)"       seems slower


................................................................................
    return dColorType


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)
................................................................................
        print(sRegex)
    return 0


def createRule (s, nIdLine, sLang, bParagraph, dOptPriority):
    "returns rule as list [option name, regex, bCaseInsensitive, identifier, list of actions]"
    global dJSREGEXES


    sLineId = "#" + str(nIdLine) + ("p" if bParagraph else "s")
    sRuleId = sLineId

    #### GRAPH CALL
    if s.startswith("@@@@"):
        if bParagraph:
................................................................................
    #### OPTIONS
    sOption = False         # False or [a-z0-9]+ name
    nPriority = 4           # Default is 4, value must be between 0 and 9
    tGroups = None          # code for groups positioning (only useful for JavaScript)
    cCaseMode = 'i'         # i: case insensitive,  s: case sensitive,  u: uppercasing allowed
    cWordLimitLeft = '['    # [: word limit, <: no specific limit
    cWordLimitRight = ']'   # ]: word limit, >: no specific limit
    m = re.match("^__(?P<borders_and_case>[\\[<]\\w[\\]>])(?P<option>/[a-zA-Z0-9]+|)(?P<ruleid>\\(\\w+\\))(?P<priority>![0-9]|)__ *", s)
    if m:
        cWordLimitLeft = m.group('borders_and_case')[0]
        cCaseMode = m.group('borders_and_case')[1]
        cWordLimitRight = m.group('borders_and_case')[2]
        sOption = m.group('option')[1:]  if m.group('option')  else False

        sRuleId =  m.group('ruleid')[1:-1]
        if sRuleId in aRULESET:
            print("# Error. Several rules have the same id: " + sRuleId)
            exit()
        aRULESET.add(sRuleId)


        nPriority = dOptPriority.get(sOption, 4)
        if m.group('priority'):
            nPriority = int(m.group('priority')[1:])
        s = s[m.end(0):]
    else:
        print("# Warning. Rule wrongly shaped at line: " + sLineId)
        exit()

    #### REGEX TRIGGER
    i = s.find(" <<-")
    if i == -1:
        print("# Error: no condition at line " + sLineId)
        return None
    sRegex = s[:i].strip()
................................................................................
            pass
        elif bGraph:
            lGraphRule.append([i, sLine])
        # Regex rules
        elif re.match("[  \t]*$", sLine):
            # empty line
            pass
        elif sLine.startswith("    "):
            # rule (continuation)
            lRuleLine[-1][1] += " " + sLine.strip()
        else:
            # new rule
            lRuleLine.append([i, sLine.strip()])

    # generating options files
................................................................................
        # JavaScript
        sJSCallables += "    {}: function ({})".format(sFuncName, sParams) + " {\n"
        sJSCallables += "        return " + jsconv.py2js(sReturn) + ";\n"
        sJSCallables += "    },\n"

    displayStats(lParagraphRules, lSentenceRules)



    dVars = {
        "fBuildTime": fBuildTime,
        "callables": sPyCallables,
        "callablesJS": sJSCallables,
        "gctests": sGCTests,
        "gctestsJS": sGCTestsJS,
        "paragraph_rules": mergeRulesByOption(lParagraphRules),

Modified doc/syntax.txt from [3e9971cb59] to [22d5e1895e].

80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
...
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
...
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
...
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
...
417
418
419
420
421
422
423




424
425
426
427
428
429
430

Patterns are written with the Python syntax for regular expressions:
http://docs.python.org/library/re.html

There can be one or several actions for each rule, executed following the order they are
written.

Optional: option, rulename, priority, condition, URL

LCR flags means:

* L: Left boundary for the regex
* C: Case sensitiveness
* R: Right boundary for the regex

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

>   `s`     case sensitive

>   `u`     uppercase allowed for lowercase characters

>>          i.e.:  "Word"  becomes  "W[oO][rR][dD]"

Examples:

    __[i]__
    __<s]__
    __[u>__
    __<s>__


User option activating/deactivating is possible with an option name placed
just after the LCR flags, i.e.:

    __[i]/option1__
    __[u]/option2__
    __[s>/option1__
    __<u>/option3__
    __<i>/option3__

Rules can be named:

    __[i]/option1(name1)__
    __[u]/option2(name2)__
    __[s>/option1(name3)__
    __<u>(name4)__
    __<i>(name5)__

Each rule name must be unique.


The LCR flags are also optional. If you don’t set these flags, the default LCR
flags will be:

    __[i]__

Example. Report “foo” in the text and suggest “bar”:

    foo <<- ->> bar         # Use bar instead of foo.

Example. Recognize and suggest missing hyphen and rewrite internally the text
with the hyphen:

    __[s]__
        foo bar
            <<- ->> foo-bar     # Missing hyphen.
            <<- ~>> foo-bar


### Simple-line or multi-line rules

Rules can be break to multiple lines by leading spaces.
You should use 4 spaces.

Examples:

    __<s>__ pattern <<- condition ->> replacement # message

    __<s>__
        pattern
            <<- condition ->> replacement
            # message
            <<- condition ->> suggestion # message
            <<- condition ~>> text_rewriting
            <<- =>> disambiguation


### Whitespaces at the border of patterns or suggestions

Example: Recognize double or more spaces and suggests a single space:

    __<s>__  "  +" <<- ->> " "      # Remove extra space(s).

Characters `"` protect spaces in the pattern and in the replacement text.


### Pattern groups and back references

It is usually useful to retrieve parts of the matched pattern. We simply use
................................................................................

Example. Suggest a word with correct quotation marks:

    \"(\w+)\" <<- ->> “\1”      # Correct quotation marks.

Example. Suggest the missing space after the signs `!`, `?` or `.`:

    __<i]__  \b([?!.])([A-Z]+) <<- ->> \1 \2     # Missing space?

Example. Back reference in messages.

    (fooo) bar <<- ->> foo      # “\1” should be:


### Group positioning codes for JavaScript:
................................................................................
    " ([?!;])"  @@1


### Pattern matching

Repeating pattern matching of a single rule continues after the previous matching, so instead of general multiword patterns, like

        (\w+) (\w+) <<- some_check(\1, \2) ->> \1, \2 # foo

use

        (\w+) <<- some_check(\1, word(1)) ->> \1, # foo


## TOKEN RULES ##

Token rules must be defined within a graph.

### Token rules syntax
................................................................................

`sCountry`

>   Contains the current country locale of the checked paragraph.

    colour <<- sCountry == "US" ->> color   # Use American English spelling.






## ACTIONS ##

There are 5 kinds of actions:

1. Suggestions. The grammar checker suggests corrections.
2. Text processor. A internal process to modify the text internally. This is used to simplify grammar checking.







|







 







|
<
<
<
<
<
<




|
|
|
<
<
<
<
<
<
<
<
|
|



<
<
<
<
<
<
<
<
<
<



|












|

|












|







 







|







 







|



|







 







>
>
>
>







80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
...
110
111
112
113
114
115
116
117






118
119
120
121
122
123
124








125
126
127
128
129










130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
...
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
...
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
...
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410

Patterns are written with the Python syntax for regular expressions:
http://docs.python.org/library/re.html

There can be one or several actions for each rule, executed following the order they are
written.

Optional: option, priority, condition, URL

LCR flags means:

* L: Left boundary for the regex
* C: Case sensitiveness
* R: Right boundary for the regex

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

>   `s`     case sensitive

>   `u`     uppercase allowed for lowercase characters

>>          i.e.:  "Word"  becomes  "W[oO][rR][dD]"

Examples: `[i]`, `<s]`, `[u>`, `<s>`







User option activating/deactivating is possible with an option name placed
just after the LCR flags, i.e.:

    __[i]/option1(rulename1)__
    __[u]/option2(rulename2)__
    __[s>/option3(rulename3)__








    __<u>(rulename4)__
    __<i>(rulename5)__

Each rule name must be unique.











Example. Recognize and suggest missing hyphen and rewrite internally the text
with the hyphen:

    __[s](rulename)__
        foo bar
            <<- ->> foo-bar     # Missing hyphen.
            <<- ~>> foo-bar


### Simple-line or multi-line rules

Rules can be break to multiple lines by leading spaces.
You should use 4 spaces.

Examples:

    __<s>(rulename)__ pattern <<- condition ->> replacement # message

    __<s>(rulename)__
        pattern
            <<- condition ->> replacement
            # message
            <<- condition ->> suggestion # message
            <<- condition ~>> text_rewriting
            <<- =>> disambiguation


### Whitespaces at the border of patterns or suggestions

Example: Recognize double or more spaces and suggests a single space:

    __<s>(rulename)__  "  +" <<- ->> " "      # Remove extra space(s).

Characters `"` protect spaces in the pattern and in the replacement text.


### Pattern groups and back references

It is usually useful to retrieve parts of the matched pattern. We simply use
................................................................................

Example. Suggest a word with correct quotation marks:

    \"(\w+)\" <<- ->> “\1”      # Correct quotation marks.

Example. Suggest the missing space after the signs `!`, `?` or `.`:

    \b([?!.])([A-Z]+) <<- ->> \1 \2     # Missing space?

Example. Back reference in messages.

    (fooo) bar <<- ->> foo      # “\1” should be:


### Group positioning codes for JavaScript:
................................................................................
    " ([?!;])"  @@1


### Pattern matching

Repeating pattern matching of a single rule continues after the previous matching, so instead of general multiword patterns, like

    (\w+) (\w+) <<- some_check(\1, \2) ->> \1, \2 # foo

use

    (\w+) <<- some_check(\1, word(1)) ->> \1, # foo


## TOKEN RULES ##

Token rules must be defined within a graph.

### Token rules syntax
................................................................................

`sCountry`

>   Contains the current country locale of the checked paragraph.

    colour <<- sCountry == "US" ->> color   # Use American English spelling.

`sContext`

>   The name of the application running (Python, Writer…)


## ACTIONS ##

There are 5 kinds of actions:

1. Suggestions. The grammar checker suggests corrections.
2. Text processor. A internal process to modify the text internally. This is used to simplify grammar checking.

Modified gc_lang/fr/rules.grx from [1b31c479b1] to [53b96d8b22].

51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
...
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
...
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
...
815
816
817
818
819
820
821

822
823
824
825
826
827
828
....
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
....
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030

7031

7032
7033
7034
7035
7036
7037
7038
....
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
....
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
....
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
....
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
....
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
....
8344
8345
8346
8347
8348
8349
8350





























8351
8352
8353
8354
8355
8356
8357
....
9545
9546
9547
9548
9549
9550
9551

















9552
9553
9554
9555
9556
9557
9558
.....
10263
10264
10265
10266
10267
10268
10269



10270
10271
10272
10273
10274
10275
10276
.....
10282
10283
10284
10285
10286
10287
10288

10289
10290
10291
10292
10293
10294
10295
.....
10341
10342
10343
10344
10345
10346
10347




10348
10349
10350
10351
10352
10353
10354
10355
10356
10357

10358
10359
10360
10361
10362
10363
10364
.....
11946
11947
11948
11949
11950
11951
11952

11953
11954
11955

11956
11957
11958
11959
11960
11961
11962
.....
12253
12254
12255
12256
12257
12258
12259

12260
12261
12262
12263
12264
12265
12266
.....
12476
12477
12478
12479
12480
12481
12482

12483
12484
12485
12486
12487
12488
12489
.....
12865
12866
12867
12868
12869
12870
12871






12872
12873
12874
12875
12876
12877
12878
.....
13599
13600
13601
13602
13603
13604
13605

13606
13607
13608
13609
13610
13611
13612
.....
13665
13666
13667
13668
13669
13670
13671

13672
13673
13674
13675
13676
13677
13678
.....
13718
13719
13720
13721
13722
13723
13724

13725
13726
13727
13728
13729
13730
13731
.....
13828
13829
13830
13831
13832
13833
13834

13835
13836
13837
13838
13839
13840
13841
13842
13843
13844
13845

13846
13847
13848
13849
13850
13851
13852
.....
13874
13875
13876
13877
13878
13879
13880

13881
13882
13883
13884
13885
13886
13887
13888
13889
13890
13891
13892
13893

13894
13895
13896
13897
13898
13899
13900
.....
13909
13910
13911
13912
13913
13914
13915

13916
13917
13918
13919
13920
13921
13922
.....
13952
13953
13954
13955
13956
13957
13958

13959
13960
13961
13962
13963
13964
13965
13966
13967
13968
13969
13970
13971
.....
13999
14000
14001
14002
14003
14004
14005

14006
14007
14008
14009
14010
14011
14012
.....
14030
14031
14032
14033
14034
14035
14036


14037
14038
14039
14040
14041
14042
14043
14044
14045
14046
14047
14048
14049



14050
14051
14052
14053
14054
14055
14056
.....
14491
14492
14493
14494
14495
14496
14497
14498
14499
14500
14501
14502
14503
14504
14505
.....
17499
17500
17501
17502
17503
17504
17505

17506
17507
17508
17509
17510
17511
17512
17513
17514
17515
17516
17517
17518
17519
17520

17521
17522
17523
17524
17525
17526
17527
17528
17529
17530
17531
17532
17533
17534
17535

17536
17537
17538
17539
17540
17541
17542
17543
17544
17545
17546
.....
17755
17756
17757
17758
17759
17760
17761



17762
17763
17764
17765
17766
17767

17768
17769
17770
17771
17772
17773
17774
.....
20928
20929
20930
20931
20932
20933
20934
20935
20936
20937
20938

20939
20940
20941
20942
20943
20944
20945
.....
25640
25641
25642
25643
25644
25645
25646



25647
25648
25649
25650
25651
25652
25653
.....
25660
25661
25662
25663
25664
25665
25666

25667
25668
25669
25670
25671
25672
25673
#OPT/romain:         False       False       False       False       False       False
OPT/virg:           True        True        True        True        True        True
OPT/poncfin:        False       False       False       False       False       False
OPT/unit:           True        True        True        False       False       False
OPT/nf:             True        True        True        True        True        True
OPT/liga:           False       False       False       False       False       False
OPT/mapos:          False       False       False       False       False       False
OPT/chim:           False       False       False       False       False       False
OPT/ocr:            False       False       False       False       False       False
OPT/conf:           True        True        True        True        True        True
OPT/sgpl:           True        True        True        True        True        True
OPT/gn:             True        True        True        True        True        True
OPT/infi:           True        True        True        True        True        True
OPT/conj:           True        True        True        True        True        True
OPT/ppas:           True        True        True        True        True        True
................................................................................
OPTLABEL/poncfin:   Ponctuation finale [!]|Vérifie s’il manque une ponctuation finale au paragraphe (seulement pour les paragraphes constitués de plusieurs phrases).
OPTLABEL/tu:        Traits d’union|Cherche les traits d’union manquants ou inutiles.
OPTLABEL/num:       Nombres|Espaces insécables sur les grands nombres (> 10 000). Vérifie la présence de « O » au lieu de « 0 ».
OPTLABEL/unit:      Espaces insécables avant unités de mesure
OPTLABEL/nf:        Normes françaises
OPTLABEL/liga:      Signaler ligatures typographiques|Ligatures de fi, fl, ff, ffi, ffl, ft, st.
OPTLABEL/mapos:     Apostrophe manquante après lettres isolées [!]|Apostrophe manquante après les lettres l d s n c j m t ç. Cette option sert surtout à repérer les défauts de numérisation des textes et est déconseillée pour les textes scientifiques.
OPTLABEL/chim:      Chimie [!]|Typographie des composés chimiques (H₂O, CO₂, etc.).
OPTLABEL/ocr:       Erreurs de numérisation (OCR) [!]|Erreurs de reconnaissance optique des caractères. Beaucoup de faux positifs.

OPTLABEL/gramm:     Noms et adjectifs
OPTLABEL/conf:      Confusions et faux-amis|Cherche des erreurs souvent dues à l’homonymie (par exemple, les confusions entre « faîte » et « faite »).
OPTLABEL/sgpl:      Pluriels (locutions)|Vérifie l’usage du pluriel ou du singulier dans certaines locutions.
OPTLABEL/gn:        Accords (genre et nombre)|Accords des noms et des adjectifs.

................................................................................
#OPTLABEL/romain:    Roman numerals|Use dedicated characters (small caps) for roman numerals.
OPTLABEL/tu:        Hyphens|Checks missing or useless hyphens.
OPTLABEL/num:       Numerals|Large numerals and « O » instead of « 0 ».
OPTLABEL/unit:      Non-breaking spaces before units of measurement
OPTLABEL/nf:        French standards
OPTLABEL/liga:      Report typographical ligatures|Ligatures of fi, fl, ff, ffi, ffl, ft, st.
OPTLABEL/mapos:     Missing apostrophes after single letters [!]|Missing apostrophes after l d s n c j m t ç. This option is mostly useful to detect defects of digitized texts and is not recommended for scientific texts.
OPTLABEL/chim:      Chemistry [!]|Typography for molecules (H₂O, CO₂, etc.)
OPTLABEL/ocr:       OCR errors [!]|Warning: many false positives.

OPTLABEL/gramm:     Nouns and Adjectives
OPTLABEL/conf:      Confusions and false friends|Seeks errors often due to homonymy (i.e. confusions between « faîte » et « faite »).
OPTLABEL/sgpl:      Plural (locutions)|Checks the use of plural and singular in locutions.
OPTLABEL/gn:        Agreement (gender and number)|Agreement between nouns and adjectives.

................................................................................
TEST: Je suis là. {{viens}}.                                              ->> Viens
TEST: Ils sont devenus idiots. {{c}}’est peine perdue.

__<s>/maj(majuscule_début_paragraphe)__
    ^ *([a-zàâéèêîôç](?:[\w-]+[’'`‘]?|[’'`‘]))  @@$
    <<- after("\\w\\w[.] +\\w+") -1>> =\1.capitalize()                                              # Majuscule en début de phrase, sauf éventuellement lors d’une énumération.


TEST: {{je}} suis disponible quand tu veux. Mais pas aujourd’hui.
TEST: {{j’}}arrive. Prépare-toi.
TEST: {{qu’}}il est grand, ce batiment. Faut voir si on pourra la détruire avec si peu de charges.


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

__[s]/unit(unit_nbsp_avant_unités1)__
    ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹]|)) ?)(?:[kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|MHz|°C|℃)(?![’'])  @@0,0
    <<- option("num") -1>> =formatNumber(\2) + " "              # Avec une unité de mesure, mettez un espace insécable.
    <<- __else__ -1>> "\2 "                                     # 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") -1>> =formatNumber(\2) + " "              # 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__ -1>> "\2 "                                     # 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") -1>> =formatNumber(\2) + " "              # 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__ -1>> "\2 "                                     # 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
TEST: Ça a duré {{3,5 }}µs
TEST: il y en a {{3 }}m²
TEST: il a fait {{10}}%
TEST: Ça coûte {{13,4}}¥.
TEST: il mesure {{30,3 }}cm
TEST: il est monté à {{18 }}%
TEST: une température de {{22,4 }}°C
TEST: il en veut {{18}}kg
TEST: il me le propose pour {{243 }}gCO2/kWh
TEST: il me le propose pour {{243,4 }}gCO2/kWh
TEST: en l’an 2000 Urgondorletroll eut une idée
TEST: 1998 s’annonce grandiose.
TEST: il y en a 3,43 milliards.
TEST: je veux 200 euros.


!!
................................................................................
    a bâbord
    a bâtons rompus
    a beaucoup près
    a belles dents
    a bien des égards
    a bien y [penser|réfléchir|songer]
    a bon [compte|escient|droit]
    a bout de [bras|souffle|>force]
    a bout [portant|touchant]
    a bras le corps
    a bras ouverts
    a bride abattue
    a ?[si|très|trop]¿ brève échéance
    a plus ou moins brève échéance
    a but non lucratif
    a cause [de|d’] {pronom_obj}
    a ce [compte-là|moment-là|titre]
    a cet égard
    a cet instant précis
    a cette époque
    a cette époque de l’année
    a cette heure de la [journée|nuit]
    a chaque [fois|instant]
    a charge de revanche
    a ?[si|très|trop]¿ chaudes larmes
    a cheval sur
    a cœur [joie|ouvert|perdu]
    a ciel ouvert
    a connotation sexuelle
    a corps perdu
    a côté [de|d’]
    a couper le souffle
    a ?[si|très|trop]¿ court terme
    a ?[si|très|trop]¿ courte [échéance|portée]
    a couilles rabattues
    a >couteau [tiré|tirés]
    a de ?[si|très|trop]¿ nombreuses reprises
    a des kilomètres à la ronde
    a dose homéopathique
    a double [titre|tranchant]
    a durée [déterminée|indéterminée|limitée]
    a en juger par [mon|ton|son|notre|votre|leur] expérience
    a en juger par [mon|ton|son|notre|votre|leur] expérience
    a en perdre haleine
    a en perdre la tête
    a ?[si|très|trop]¿ faible [allure|revenu]
    a ?[si|très|trop]¿ faible tirant d’ eau
    a feu et à sang
    a flanc de [colline|montagne]
    a fleur de peau

    a géométrie variable

    a grand-peine
    a grande échelle
    a grands frais
    a ?[si|très|trop]¿ haut risque
    a ?[si|très|trop]¿ haute [altitude|voix]
    a ?[si|très|trop]¿ haute et intelligible voix
    a heure fixe
................................................................................
    a huis clos
    a intervalles [réguliers|irréguliers]
    a ?[si|très|trop]¿ juste [raison|titre]
    a l’ heure actuelle
    a l’ heure qu’ il est
    a l’ [accoutumée|amiable|arrache|avance|avenant|avenir|aveuglette|écart|emporte-pièce|évidence|étouffée|extérieur|improviste|intérieur|inverse|occasion|unanimité|unisson]
    a l’ air libre
    a l’ exclusion de toute autre chose
    a l’ ordre du jour
    a l’ œil nu
    a l’ en croire
    a l’ un d’ entre eux
    a l’ un des leurs
    a l’ une d’ entre elles
    a l’ une des leurs
    a la [con|dérive|dérobée|diable|fois|mords-moi-le-nœud|papa|rescousse|sauvette|va-vite|volée]
    a la bonne franquette
    a la fin de l’ an ?[passé|~^[0-9]{2,5}$]¿
    a la fin de l’ année ?[passée|~^[0-9]{2,5}$]¿
    a la fin des années ~^[0-9]{2,5}$
    a la fin du mois [de|d’] {mois} ?[passé|prochain|~^[0-9]{2,5}$]¿
    a la limite du supportable
    a la lumière de tout [ceci|cela|ça]
    a la petite semaine
    a la pointe du progrès
    a la queue leu leu
    a la surprise générale
    a la va vite
    a la virgule près
    a la [dérobée|manque|ramasse|redresse|renverse]
................................................................................
    a outrance
    a parler franc
    a part [entière|ça|cela|ceci]
    a partir [de|d’] [demain|là|maintenant|rien|aujourd’hui|hier|ici]
    a parts égales
    a pas [de|d’] [géant|loup|tortue|velours]
    a personne en danger
    a perte de vue
    a ?[si|très|trop]¿ petit feu
    a ?[si|très|trop]¿ petite [dose|échelle]
    a ?[si|très|trop]¿ peu de >chose près
    a peu près
    a pied d’ œuvre
    a pieds joints
    a pile ou face
    a plat ventre
    a plate couture
    a plein [régime|temps|nez]
    a pleins poumons
    a plus forte raison
    a plus d’ un titre
    a poil [court|dur|long|rêche]
    a point nommé
    a portée de main
    a première vue
    a prix [cassé|cassés|>modique]
    a proprement parler
    a qui de droit
    a qui mieux mieux
    a qui que ce soit
    a quelque distance
    a quelques exceptions près
    a ras >bord
    a ras de terre
    a ras [du|le] sol
    a rude épreuve
    a >seul [>fin|>faim] [de|d’]
    a tel point
    a temps [plein|partiel|complet]
    a tête reposée
    a >tarif >réduit
    a taux [>fixe|>variable|>zéro|>nulle|nul+s]
    a titre [conservatoire|indicatif|informatif|grâcieux|personnel|posthume]
    a titre d’ exemple
    a tombeau ouvert
    a tort et à travers
    a tort ou à raison
    a tour de [bras|rôle]
    a tous crins
    a tous points de vue
    a tout [âge|crin|instant|jamais|moment|prix]
    a tout bout de champ
    a tout le [moins|monde]
    a tout point de vue
    a tout un chacun
    a toute [allure|berzingue|bride|épreuve|force|heure|vitesse|volée]
    a toutes jambes
    a toutes fins utiles
    a tribord
    a tu et à toi
    a un moment donné
................................................................................
    a vitesse grand V
    a vive allure
    a voix [haute|basse]
    a vol d’ oiseau
    a vrai dire
    a vue d’ œil
    a y [réfléchir|songer|penser]
    a y regarder de plus près
        <<- /conf/ not value(<1, "|l’|n’|il|elle|on|y|") and not before("(?i)n’en +$")
        -1>> à              # Confusion probable : “a” est une forme conjugée du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

    a [mon|ton|son|notre|votre|leur] [cœur|corps] défendant
    a [mon|ton|son|notre|votre|leur] grand désarroi
    a [mon|ton|son|notre|votre|leur] [avis|côté|détriment|encontre|égard|insu|sujet|tour]
    a [ma|ta|sa|notre|votre|leur] grande [surprise|tristesse]
................................................................................
TEST: il va dans l’{{haut delà}}


# aile / elle
__conf_aile_elle__
    l’ [elle+s]
    [mon|son|ton|son|notre|votre|leur] [elle+s] [droite|gauche]
    une [elle+s] [de|d’] [poulet|poule|perdreau|canard|perdrix|pigeon|raie|papillon|voiture|bâtiment|château|manoir|palais]
        <<- /conf/ -2>> aile
        # Confusion probable : “elle” est un pronom personnel féminin. Pour les oiseaux, les avions ou les parties d’un bâtiment ou d’une armée, écrivez “aile”.|https://fr.wiktionary.org/wiki/aile

    [des|mes|tes|ses|ces|nos|vos] ([elle+s])
    les ([elle+s]) [de|des|du|d’]
    [sous|sur] leurs ([elle+s]) [<end>|,|$:R]
        <<- /conf/ -1>> ailes
................................................................................
TEST: L’hostie n’est pas le {{cor}} du Christ.
TEST: elle détestait son nouveau garde du {{cor}}
TEST: Elle souffla puissamment dans le {{corps}} de chasse.


# cou / coup / coût
__conf_coup_cout_cou1__
    [>cou|>coût|>cout] [de|d’] [>baguette|>barre|>bâton|>bec|>bélier|blues|>botte|>boule|>boutoir|>bol|>bite|>cœur|>chaud|>coude|>couteau|>dé|>dent|>déprime|>froid|fil|>foudre|>genou|>grâce|>griffe|>grisou|>gueule|>hache|>hanche|Jarnac|jus|>jeune|>klaxon|>main|maître|maitre|>massue|>marteau|>nostalgie|>pied|>poing|>poignard|>pouce|>pute|>queue|>rein|>rabot|>savate|>sang|>sabot|>sabre|>sifflet|>soleil|>sonde|>surin|>tête|>théâtre|>tonnerre|>torchon|>trique|>vent|vieux]
    [>cou|>coût|>cout] d’ [>éclat|>épée|>état|>épaule|œil|>estoc]
    [>cou|>coût|>cout] du sort
    [>cou|>coût|>cout] [dur|durs]
        <<- /conf/ -1>> coup|coups      # Confusion probable. Le coût est le prix d’une chose. Le cou est la partie joignant le tronc à la tête. Pour ce qui frappe, écrivez “coup”.

    [>cou|>coup] de [>base|revient|reviens|>distribution|>développement|>production|>maintenance|>construction|>fonctionnement|>fabrication|>financement|>formation|>renonciation|>stockage|>transaction|>transfert|>transport|>transformation|>viabilisation]
    [>cou|>coup] de la vie
................................................................................
    *WORD  dîtes  @:A¬:G
        <<- /conf/ morph(\1, ":[NA].*:[fe]:[pi]", ":G") -2>> dites      # Confusion probable : “dîtes” est une forme verbale de dire au subjonctif. Pour l’ajectif, écrivez “dites”.

TEST: Des armes {{dîtes}} létales.                                          ->> dites
TEST: usage débridé des armes dites létales
TEST: Vous dîtes “idiotes”, je dis “originales”.































# dû / du
__ppas_dû_du__
    du  [à|a|au|aux]
        <<- /ppas/ \2.islower() -1>> dû                         # Confusion. Ce qui est dû.

    [mon|notre|votre]  du
................................................................................
        <<- /conf/ not value(<1, "|la|en|une|") and not value(>1, "|position|dance|")
        ->> pôle|pôles                                                      # Confusion probable. Le terme “pole” ne s’utilise que pour la “pole position” ou la “pole dance”.

TEST: il y a {{un}} {{pole}} d’activités pas loin d’ici.
TEST: il est parti en pole position.
TEST: elle fait de la pole dance.



















# pomme / paume
__conf_pomme_paume__
    >tomber ?[pas|jamais|guère|peu]¿ dans les >paume
        <<- /conf/ --3:0>> dans les pommes                                  # Locution “tomber dans les pommes”, c’est-à-dire perdre connaissance.|https://fr.wiktionary.org/wiki/tomber_dans_les_pommes

    >jeu de >pomme
................................................................................

__conf_soi_soit_soie__
    [chez|sur|avec|pour] soit
    don de soit
    estime de soit
        <<- /conf/ not after(" soit ") --1>> soi                                                    # Confusion probable.




    en soit
        <<- /conf/ morph(>1, ":[GY]|<end>", ">à/") and not value(<1, "|il|on|elle|n’|m’|t’|s’|") and not before("(?i)quel(?:s|les?|) qu[’ ]$") and not after(" soit ")
        -2>> soi                                                                                    # Confusion probable.

    [soi|sois|soit|>soie]  >même
        <<- /conf/ morph(<1, ":[YQ]|>(?:avec|contre|par|pour|sur)/|<start>|>,") ->> soi-même        # Confusion probable : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.

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

TEST: chez {{soit}}, c’est presque toujours mieux.
TEST: ce n’est pas la philosophie en {{soit}} qui est problématique
TEST: quel que {{soie}} sa pensée, je refuse d’y accorder de l’attention.
TEST: Penser par {{soit même}}…
TEST: S’aimer {{soit-même}}, c’est le début d’une grande histoire d’amour. (Oscar Wilde)
TEST: pas sûr que {{sa}} {{soi}} terminé avant demain

TEST: Je regrette que l’on en soit encore à des considérations que je croyais dépassées
TEST: Quoi qu’il en soit
TEST: À moins qu’elle n’en soit la victime.
TEST: Je doute qu’il s’en soit sorti si aisément.
TEST: Je refuse, quoi qu’il en soit.
TEST: on ne s’étonne plus que le parquet de Paris en soit à agir sous l’effet de quelque urgence médiatique
TEST: Vous êtes soit pour soit contre, mais pas les deux en même temps
................................................................................
    en sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW]
        <<- /conf/ not value(<1, "|ils|elles|iels|leur|lui|nous|vous|m’|t’|s’|l’|") and not tag(<1, "_ceque_")
        -2>> son                                                # Confusion probable : “sont” est le verbe “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”.

    son [ceux|celles]
        <<- /conf/ not morph(<1, ":D.*:m:s") -1>> sont          # Confusion probable : “son” est un déterminant ou un nom masculin. Le verbe “être” à la 3ᵉ personne du pluriel s’écrit “sont”.





TEST: ne leur {{son}} pas odieux.
TEST: Ces chiens me {{son}} odieux.
TEST: ces gens qui {{son}}, dans le meilleur des cas, des imbéciles ne peuvent nous aider.
TEST: {{sont}} {{pain}}
TEST: en {{sont}} {{absence}}
TEST: qui {{son}} ces gens ?
TEST: chez {{sont}} amis
TEST: il a perdu {{sont}} {{ami}}
TEST: ces gens {{son}} ceux qui nous mettent constamment dans la merde          ->> sont
TEST: à {{sont}} précis de mathématiques                                        ->> son

TEST: elles s’en sont mal portées
TEST: ils en sont reconnaissants
TEST: sont loin, ces gens…
TEST: Il ne sait pas vraiment ce que sont la peur et la souffrance.
TEST: avec le mur du son ceux qui l’entendent.
TEST: Que sont nos valeurs profondes ?
TEST: comment sont la petite et son frère ?
................................................................................
    à en perdre la tête
    à ?[si|très|trop]¿ faible [allure|revenu]
    à ?[si|très|trop]¿ faible tirant d’ eau
    à feu et à sang
    à flanc de [colline|montagne]
    à fleur de peau
    à franchement parler

    à géométrie variable
    à glacer le sang
    à glacer les sangs

    à grande échelle
    à ?[si|très|trop]¿ grands frais
    à ?[si|très|trop]¿ haut risque
    à ?[si|très|trop]¿ haute [altitude|voix]
    à ?[si|très|trop]¿ haute et intelligible voix
    à heure fixe
    à hue et à dia
................................................................................
    comme d’ habitude
    comme toujours
    comme de juste
    comme bon [me|te|lui|leur|nous|vous] semble
    comme au bon vieux temps
    comme cul et chemise
    comme [frappé+ses] par la foudre

    comme n’importe où ?ailleurs¿
    comme par [enchantement|magie]
    comme par un fait exprès
    comme pas deux
    comme peau de chagrin
    comme promis
    comme qui dirait
................................................................................
    [de|d’] siècle en siècle
    [de|d’] millénaire en millénaire
    [de|d’] décennie en décennie
    [demain|après-demain] ?[matin|soir|après-midi]¿
    avant demain ?[matin|soir|après-midi]¿
    debout
    derechef

    donc
    dorénavant
    déjà
    désormais
    depuis $:B [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis *NUM [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis belle lurette
................................................................................
    plus que [nécessaire|prévu|jamais]
    plus que d’ habitude
    plus que tout au monde
    plus que toute autre chose
    plusieurs fois
    plusieurs fois [de|d’] suite
    plutôt






    pour [celui|celle|ceux|celles] et [celui|celle|ceux|celles] que [ça|cela|ceci] intéresse
    pour [celui|celle|ceux|celles] que [ça|cela|ceci] intéresse
    pour [ma|ta|sa|notre|votre|leur] [gouverne|part]
    pour [mon|ton|son|notre|votre|leur] propre [compte|bien]
    pour [m’|t’|s’|nous|vous] en rendre compte
    pour ainsi dire
    pour ce faire
................................................................................
    >acte d’ [achat|engagement]
    >acte [de|d’] gestion ?courante¿
    >acte [de|d’] procédure ?pénale¿
    >acte d’ état ?civil¿
    >administrateur >système
    >agence [de|d’] >voyage
    >agité du bocal

    >aire d’ atterrissage
    >animal [de|d’] compagnie
    >appel au secours
    >appel à l’ aide
    >arc à poulies
    >arme à feu
    >armée [de|d’] l’ air
................................................................................
    [>chariot|>charriot] à [bagages|roulettes]
    >chasse à courre
    >chasse à l’ homme
    >chasse d’ eau
    >chasseur [de|d’] primes
    >chef [de|d’] file
    >chef d’ [état-major|entreprise]

    >chemin [de|d’] [traverse|fer]
    >chemise [de|d’] nuit
    >chemise sans >manche
    >chèque sans provision
    >chili con carne
    >chômage [de|d’] masse
    >chou à la crème ?[fouettée|diplomate|mousseline|patissière|pralinée]¿
................................................................................
    >crise de >nerf
    >cuillère à [café|soupe]
    >cure [de|d’] [désintoxication|désintox]
    >déclaration sur l’ honneur
    >délai [de|d’] [attente|carence|connexion|prescription|préavis|rétraction|rigueur]
    >demande d’ asile
    >descente aux [enfers|flambeaux]

    [>dîner|>diner] aux chandelles
    >digne [de|d’] [confiance|foi]
    >digne [de|d’] ce nom
    >don en nature
    >donneur [de|d’] >leçon
    >dossier d’ inscription ?[administrative|scolaire]¿
    >dossier [de|d’] presse
................................................................................
    >lime à >ongle
    >liste d’ attente
    >lit à baldaquin
    >lit [de|d’] camp
    >livraison à domicile
    >livre [de|d’] [poche|chevet]
    >livret d’ épargne ?[bancaire|populaire|salariale]¿

    >longueur d’ avance
    >lune [de|d’] miel
    >machine à [café|coudre|écrire|laver|sous|voter]
    >machine à remonter le temps
    >machine [de|d’] guerre
    >maillot [de|d’] bain
    >main d’ œuvre
    >maison à colombages
    >maison [de|d’] [passe|retraite]
    >mal [de|d’] [tête|ventre|mer]
    >mandat [de|d’] [arrêt|dépôt]

    >marchand [de|d’] fruits et légumes
    >marché aux puces
    >maréchal des [logis|logis-chef]
    >marin d’ eau douce
    >marge [de|d’] >manœuvre
    >marque [de|d’] fabrique
    >masque à [gaz|oxygène]
................................................................................
    >occasion en or ?massif¿
    >oiseau [de|d’] [malheur|nuit|proie]
    >oiseau [de|d’] mauvais augure
    >onde [de|d’] choc
    >ordre du jour
    orge [perlé|mondé|carré]
    >nuit [de|d’] noces

    >pain [de|d’] mie
    >panier à linge
    >piano à queue
    >papier à [>lettre|musique]
    >parc à thème
    >parc d’ attractions
    >parole en l’ air
    >partie [de|d’] jambes en l’ air
    >passage à tabac
    >passation [de|d’] pouvoir
    >pâte à [accras|>beignet|>brioche|choux|>crêpe|donuts|frire|galettes|>gaufre|>gâteau|modeler|nouilles|pain|pizza|sel|tarte|tartiner]
    >pâté en [croute|croûte]
    >peur [de|d’] tous les diables

    >pièce à conviction
    >pièce [de|d’] [théâtre|monnaie]
    >pièce [de|d’] *NUM [>euro|>dollar|>centime|>cent|>livre|>shilling]
    >pince à linge
    >placard à [>balai|chaussures]
    >plan [A|B|C|cul]
    >planche [de|d’] salut
................................................................................
    >porte d’ entrée
    >pot [de|d’] [chambre|colle]
    >poudre aux yeux
    >pouvoir d’ achat
    >presse à >scandale
    preuve ?suffisante¿ du contraire
    preuves ?suffisantes¿ du contraire

    prix [de|d’] revient
    quelqu’un d’ autre
    >question [de|d’] vie ou [de|d’] mort
    >rapport [de|d’] force
    >rat [de|d’] bibliothèque
    >rayon [de|d’] soleil
    >réaction en [chaîne|chaine]
................................................................................
    >seuil [de|d’] tolérance
    >seuil [de|d’] tolérance à la douleur
    >silo à [>grains|blé]
    >soldat d’ élite
    >sonnette d’ alarme
    >sortie [de|d’] secours
    >soue à >cochonne

    >suspension [de|d’] séance
    >système d’ exploitation
    >système D
    >tableau [de|d’] chasse
    >table à repasser
    >table [de|d’] chevet
    >taille *NUM
    tas [de|d’] ferraille ?rouillée¿
    >talon >aiguille
    tapis [de|d’] prière
    taux [de|d’] [abstention|absorption|alcool|alphabétisation|endettement|inflation|intérêt|imposition|occupation|ouverture|œstrogène|urée|usure|change|cholestérol|cholesterol|glycémie|fécondité|participation|testostérone|TVA]
    >témoin à charge
    tenants et aboutissants
................................................................................
    >vague à l’ âme
    >vecteur [>accélération|>position|>rotation|>vitesse]
    >véhicule [de|d’] location
    >vente à domicile
    >vente aux enchères
    >vérification [de|d’] routine
    vernis à ongles

    >verre à pied
    >virage à [*NUM|:B] degrés
    >voie [de|d’] [recours|perdition]
    >vol à l’ étalage
    >vol à la [sauvette|tire]
    >vol à main armée
    >volée [de|d’] bois vert
................................................................................
    [daté+ses] du [1er|1ᵉʳ|1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12|13|14|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31] {mois} ?[prochain|passé|dernier|~^[0-9]{2,5}$]¿
    >droit comme un i
    >fort en gueule
    >fou de rage ?[contenue|retenue]¿
    >élu à la majarité absolue
    >haut comme [trois|3] pommes
    >haut en couleur


    >mort de trouille
    >nu comme un ver
    >nu comme des vers
    >nul et non >avenu
    >noir comme la nuit
    >noir comme une nuit sans lune
    [réglé+ses] comme du papier à musique
    [remis+es] à plat
    >sain [de|d’] [corps|esprit]
    >sain [de|d’] [corps|esprit] et [de|d’] [corps|esprit]
    >têtu comme une [bourrique|mule]
    >têtu comme un [âne|bourriquot|mulet]
        <<- ~2:0>> *




    [>homme|>femme|>cinéaste|>politicien|>acteur|>auteur|>sculpteur|>compositeur|>musicien|>groupe|>romancier|>peintre|>photographe|>sportif|>philosophe|>intellectuel|>polémiste] à succès
    [>homme|>femme] d’ >affaire à succès
        <<- ~-2:0>> *

    [>bébé|fils|>fille|>enfant|>neveu|>nièce|>frère|>sœur] [de|d’] $:B [mois|ans]
    [>grand-père|>grand-mère|>père|>mère|>papa|>maman|>oncle|>tante|>frère|>sœur|beau-frère|belle-sœur|>nièce|>neveu|>cousin] [de|d’] $:B ans
................................................................................
    [les|mes|tes|ses|nos|vos|leurs]  @:[NA].*:[pi]¬:[123][sp]  les  plus  @:A.*:[pi]
        <<- ~3:4>> *

    [>être|>avoir]  le  [plus|moins]  @:A¬:([me]:[si]|G)
        <<- morph(\1, ":V") ~2:3>> *

    bien sûr
        <<- not value(>1, "|de|d’|") ~>> *

    à peu près   @:[AW]
        <<- ~1:3>> *

    à [demi|peine]              @:[AW]
    [super|fort] [bien|mal]     @:[AW]
    depuis peu                  @:[AW]
................................................................................
    >parer a toute éventualité
    >passer a tabac
    >percer a jour
    >prendre a la légère
    >prêter a >confusion
    >réduire a néant
    >saigner a blanc

    >tenir a [carreau|cœur|distance]
    >tirer a blanc
    >tomber a [pic|point]
    >tirer a blanc
    >tourner a l’ aigre
    >vendre a >perte
    >venir a bout
    [>venir|>revenir] a point
        <<- /conf/ -2>> à               # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.

    >appartenir a
    >appartenir en propre a
    >avoir vocation a
    >donner [sens|suite] a
    enclin a

    en proie a
    >laisser libre cours a
    >parvenir a
    >prêter attention a
        <<- /conf/ \-1 != "A" and not tag_before(\1, "_àCOI_") --1>> à      # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.

    >appeler a
    >avoir du mal a
    >commencer a
    >condamner a
    >dire [adieu|merde] a
    >faire confiance a
    >mentir a
    >préparer a
    >prêter serment a

    >réussir a
    >viser a
        <<- /conf/ not tag_before(\1, "_propsub_") and not morph(\1, ":Y")
        --1>> à                                                             # Confusion probable : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.

    @:V¬:[YGNAWM]  a
        <<- /conf/ \-1 != "A" and not tag_before(\1, "_propsub_") and not morph(>1, ":Q")
        --1>> à                                                             # Confusion probable : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

    [/VCint|/VCimp]  a
        <<- /conf/ not value(\1, "|rendez-vous|") --1>> à                   # Confusion : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0
................................................................................
    [>air|>ère] [de|d’]  [accueil|atterrissage|autoroute|>jeu|repos]
        <<- /conf/ -1>> aire|aires  # Confusion. Une ère est une époque. L’air est un gaz, une apparence ou une musique. Pour évoquer une surface, écrivez “aire”.|https://fr.wiktionary.org/wiki/aire

    >baptême de l’ [ère|aire]
    >libre comme l’ [ère|aire]
        <<- /conf/ --1>> air        # Confusion. Une ère est une époque. L’aire est une surface. Pour parler de l’atmosphère, écrivez “air”.|https://fr.wiktionary.org/wiki/air




TEST: L’{{aire}} du pétrole n’est pas encore terminée.
TEST: Ce sera un jour dans l’{{ère}} du temps
TEST: il a l’{{aire}} d’un plouc.
TEST: il en a tout l’{{ère}}
TEST: on s’arrêtera sur l’{{air}} d’autoroute
TEST: baptême de l’{{aire}}



# auspice / hospice
__conf_auspices_hospices__
    sous [les|de|des|ces] ?*WORD¿ hospices
        <<- /conf/ --1>> auspices       # Confusion probable. L’hospice est un centre de soins.|https://fr.wiktionary.org/wiki/auspice

................................................................................
TEST: L’hôtel {{ou}} ils sont allés l’été dernier.
TEST: une chambre {{ou}} nous n’avons rien trouvé


## Accord et incohérences
__ppas_sont_adj__
    sont  *WORD
        <<- /ppas/ morph(\2, ":V", ":(?:N|A|Q|W|G|3p)") and not tag_before(\1, "_ceque_")
        -2>> =suggVerbPpas(\2, ":m:p")                      # Incohérence : “\2” n’est pas un participe passé.

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




!!
!!
!!!! Conjugaisons nous / vous (2ᵉ partie)                                                         !!
!!
................................................................................

    >faire  attention  [à|a]  ce  [que|qu’]  @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":S", \-2)                                             # Après “faire attention à ce que”, le verbe doit être au subjonctif.

    >tenir  [à|a]  ce  [que|qu’]  @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":S", \-2)                                             # Après “tenir à ce que”, le verbe doit être au subjonctif.




    >douter  [que|qu’]  @:(?:Os|M)  @:I¬:(?:[GYSK]|If)
        <<- /vmode/ not tag(\1, "upron") and not tag(\1, "neg") and morph(\1, ":V", ":N")
        --1>> =suggVerbMode(\-1, ":S", \-2)                                                         # Après “\1 que”, ce verbe devrait être au subjonctif.

    [il|ça|cela]  [peut|pouvait]  [que|qu’]  @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ tag(\2, "upron") --1>> =suggVerbMode(\-1, ":S", \-2)                            # Après “\1 se peut que”, le verbe devrait être au subjonctif.

................................................................................
TEST: peu s’en est fallu qu’il {{devient}} estropié.
TEST: je m’étonne qu’il {{est}} aussi fragile
TEST: elle a envie qu’il {{est}} intelligent.
TEST: il importera que nous {{devenons}} prêts.
TEST: prends garde que vous {{revenez}} en un seul morceau.
TEST: faites attention à ce qu’elle ne {{devient}} pas timorée.
TEST: je tiens à ce que vous {{devenez}} grands.

TEST: Je ne doute pas qu’ils réussiront leur mission.
TEST: Je me doutais bien qu’Apple pourrait marcher
TEST: Je me doutais bien qu’elle me détestait
TEST: Je veux que tu sois prudent.
TEST: Je souhaitais que tu fusses présent.
TEST: Je souhaite qu’il apprenne le français.
TEST: Je ne permets pas que tu sois imprudent.







|







 







|







 







|







 







>







 







|
|
|




|
|




|
|

|
|
|
|
|
|
|
|
|
|
|







 







|












|
|

|












|











|
|
>

>







 







|









|
|



|







 







|


|












|



|





|













|

|

|

|







 







|







 







|







 







|







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>







 







>







 







>
>
>
>










>







 







>



>







 







>







 







>







 







>
>
>
>
>
>







 







>







 







>







 







>







 







>











>







 







>


<










>







 







>







 







>





|







 







>







 







>
>













>
>
>







 







|







 







>








|






>




|










>



|







 







>
>
>






>







 







|



>







 







>
>
>







 







>







51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
...
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
...
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
...
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
....
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
....
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
....
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
....
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
....
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
....
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
....
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
....
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
....
9577
9578
9579
9580
9581
9582
9583
9584
9585
9586
9587
9588
9589
9590
9591
9592
9593
9594
9595
9596
9597
9598
9599
9600
9601
9602
9603
9604
9605
9606
9607
.....
10312
10313
10314
10315
10316
10317
10318
10319
10320
10321
10322
10323
10324
10325
10326
10327
10328
.....
10334
10335
10336
10337
10338
10339
10340
10341
10342
10343
10344
10345
10346
10347
10348
.....
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415
10416
10417
10418
10419
10420
10421
10422
.....
12004
12005
12006
12007
12008
12009
12010
12011
12012
12013
12014
12015
12016
12017
12018
12019
12020
12021
12022
.....
12313
12314
12315
12316
12317
12318
12319
12320
12321
12322
12323
12324
12325
12326
12327
.....
12537
12538
12539
12540
12541
12542
12543
12544
12545
12546
12547
12548
12549
12550
12551
.....
12927
12928
12929
12930
12931
12932
12933
12934
12935
12936
12937
12938
12939
12940
12941
12942
12943
12944
12945
12946
.....
13667
13668
13669
13670
13671
13672
13673
13674
13675
13676
13677
13678
13679
13680
13681
.....
13734
13735
13736
13737
13738
13739
13740
13741
13742
13743
13744
13745
13746
13747
13748
.....
13788
13789
13790
13791
13792
13793
13794
13795
13796
13797
13798
13799
13800
13801
13802
.....
13899
13900
13901
13902
13903
13904
13905
13906
13907
13908
13909
13910
13911
13912
13913
13914
13915
13916
13917
13918
13919
13920
13921
13922
13923
13924
13925
.....
13947
13948
13949
13950
13951
13952
13953
13954
13955
13956

13957
13958
13959
13960
13961
13962
13963
13964
13965
13966
13967
13968
13969
13970
13971
13972
13973
13974
.....
13983
13984
13985
13986
13987
13988
13989
13990
13991
13992
13993
13994
13995
13996
13997
.....
14027
14028
14029
14030
14031
14032
14033
14034
14035
14036
14037
14038
14039
14040
14041
14042
14043
14044
14045
14046
14047
.....
14075
14076
14077
14078
14079
14080
14081
14082
14083
14084
14085
14086
14087
14088
14089
.....
14107
14108
14109
14110
14111
14112
14113
14114
14115
14116
14117
14118
14119
14120
14121
14122
14123
14124
14125
14126
14127
14128
14129
14130
14131
14132
14133
14134
14135
14136
14137
14138
.....
14573
14574
14575
14576
14577
14578
14579
14580
14581
14582
14583
14584
14585
14586
14587
.....
17581
17582
17583
17584
17585
17586
17587
17588
17589
17590
17591
17592
17593
17594
17595
17596
17597
17598
17599
17600
17601
17602
17603
17604
17605
17606
17607
17608
17609
17610
17611
17612
17613
17614
17615
17616
17617
17618
17619
17620
17621
17622
17623
17624
17625
17626
17627
17628
17629
17630
17631
.....
17840
17841
17842
17843
17844
17845
17846
17847
17848
17849
17850
17851
17852
17853
17854
17855
17856
17857
17858
17859
17860
17861
17862
17863
.....
21017
21018
21019
21020
21021
21022
21023
21024
21025
21026
21027
21028
21029
21030
21031
21032
21033
21034
21035
.....
25730
25731
25732
25733
25734
25735
25736
25737
25738
25739
25740
25741
25742
25743
25744
25745
25746
.....
25753
25754
25755
25756
25757
25758
25759
25760
25761
25762
25763
25764
25765
25766
25767
#OPT/romain:         False       False       False       False       False       False
OPT/virg:           True        True        True        True        True        True
OPT/poncfin:        False       False       False       False       False       False
OPT/unit:           True        True        True        False       False       False
OPT/nf:             True        True        True        True        True        True
OPT/liga:           False       False       False       False       False       False
OPT/mapos:          False       False       False       False       False       False
OPT/chim:           True        True        False       True        True        True
OPT/ocr:            False       False       False       False       False       False
OPT/conf:           True        True        True        True        True        True
OPT/sgpl:           True        True        True        True        True        True
OPT/gn:             True        True        True        True        True        True
OPT/infi:           True        True        True        True        True        True
OPT/conj:           True        True        True        True        True        True
OPT/ppas:           True        True        True        True        True        True
................................................................................
OPTLABEL/poncfin:   Ponctuation finale [!]|Vérifie s’il manque une ponctuation finale au paragraphe (seulement pour les paragraphes constitués de plusieurs phrases).
OPTLABEL/tu:        Traits d’union|Cherche les traits d’union manquants ou inutiles.
OPTLABEL/num:       Nombres|Espaces insécables sur les grands nombres (> 10 000). Vérifie la présence de « O » au lieu de « 0 ».
OPTLABEL/unit:      Espaces insécables avant unités de mesure
OPTLABEL/nf:        Normes françaises
OPTLABEL/liga:      Signaler ligatures typographiques|Ligatures de fi, fl, ff, ffi, ffl, ft, st.
OPTLABEL/mapos:     Apostrophe manquante après lettres isolées [!]|Apostrophe manquante après les lettres l d s n c j m t ç. Cette option sert surtout à repérer les défauts de numérisation des textes et est déconseillée pour les textes scientifiques.
OPTLABEL/chim:      Chimie|Typographie des composés chimiques (H₂O, CO₂, etc.).
OPTLABEL/ocr:       Erreurs de numérisation (OCR) [!]|Erreurs de reconnaissance optique des caractères. Beaucoup de faux positifs.

OPTLABEL/gramm:     Noms et adjectifs
OPTLABEL/conf:      Confusions et faux-amis|Cherche des erreurs souvent dues à l’homonymie (par exemple, les confusions entre « faîte » et « faite »).
OPTLABEL/sgpl:      Pluriels (locutions)|Vérifie l’usage du pluriel ou du singulier dans certaines locutions.
OPTLABEL/gn:        Accords (genre et nombre)|Accords des noms et des adjectifs.

................................................................................
#OPTLABEL/romain:    Roman numerals|Use dedicated characters (small caps) for roman numerals.
OPTLABEL/tu:        Hyphens|Checks missing or useless hyphens.
OPTLABEL/num:       Numerals|Large numerals and « O » instead of « 0 ».
OPTLABEL/unit:      Non-breaking spaces before units of measurement
OPTLABEL/nf:        French standards
OPTLABEL/liga:      Report typographical ligatures|Ligatures of fi, fl, ff, ffi, ffl, ft, st.
OPTLABEL/mapos:     Missing apostrophes after single letters [!]|Missing apostrophes after l d s n c j m t ç. This option is mostly useful to detect defects of digitized texts and is not recommended for scientific texts.
OPTLABEL/chim:      Chemistry|Typography for molecules (H₂O, CO₂, etc.)
OPTLABEL/ocr:       OCR errors [!]|Warning: many false positives.

OPTLABEL/gramm:     Nouns and Adjectives
OPTLABEL/conf:      Confusions and false friends|Seeks errors often due to homonymy (i.e. confusions between « faîte » et « faite »).
OPTLABEL/sgpl:      Plural (locutions)|Checks the use of plural and singular in locutions.
OPTLABEL/gn:        Agreement (gender and number)|Agreement between nouns and adjectives.

................................................................................
TEST: Je suis là. {{viens}}.                                              ->> Viens
TEST: Ils sont devenus idiots. {{c}}’est peine perdue.

__<s>/maj(majuscule_début_paragraphe)__
    ^ *([a-zàâéèêîôç](?:[\w-]+[’'`‘]?|[’'`‘]))  @@$
    <<- after("\\w\\w[.] +\\w+") -1>> =\1.capitalize()                                              # Majuscule en début de phrase, sauf éventuellement lors d’une énumération.

# autre possibilité: avec or (sContext != "Writer" and after("[.] *$"))
TEST: {{je}} suis disponible quand tu veux. Mais pas aujourd’hui.
TEST: {{j’}}arrive. Prépare-toi.
TEST: {{qu’}}il est grand, ce batiment. Faut voir si on pourra la détruire avec si peu de charges.


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

__[s]/unit(unit_nbsp_avant_unités1)__
    ((\d+(?:,\d+[⁰¹²³⁴⁵⁶⁷⁸⁹]?|[⁰¹²³⁴⁵⁶⁷⁸⁹]|)) ?)([kcmµn]?(?:[slgJKΩ]|m[²³]?|Wh?|Hz|dB)|[%‰€$£¥Åℓhj]|min|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: il est monté à {{18 %}}                           ->> 18 %
TEST: une température de {{22,4 °C}}                    ->> 22,4 °C
TEST: il en veut {{18kg}}                               ->> 18 kg
TEST: il me le propose pour {{243 gCO2/kWh}}            ->> 243 gCO2/kWh
TEST: il me le propose pour {{243,4 gCO2/kWh}}          ->> 243,4 gCO2/kWh
TEST: en l’an 2000 Urgondorletroll eut une idée
TEST: 1998 s’annonce grandiose.
TEST: il y en a 3,43 milliards.
TEST: je veux 200 euros.


!!
................................................................................
    a bâbord
    a bâtons rompus
    a beaucoup près
    a belles dents
    a bien des égards
    a bien y [penser|réfléchir|songer]
    a bon [compte|escient|droit]
    a bout [de|d’] [bras|souffle|>force]
    a bout [portant|touchant]
    a bras le corps
    a bras ouverts
    a bride abattue
    a ?[si|très|trop]¿ brève échéance
    a plus ou moins brève échéance
    a but non lucratif
    a cause [de|d’] {pronom_obj}
    a ce [compte-là|moment-là|titre]
    a cet égard
    a cet instant précis
    a cette époque
    a cette époque [de|d’] l’année
    a cette heure [de|d’] la [journée|nuit]
    a chaque [fois|instant]
    a charge [de|d’] revanche
    a ?[si|très|trop]¿ chaudes larmes
    a cheval sur
    a cœur [joie|ouvert|perdu]
    a ciel ouvert
    a connotation sexuelle
    a corps perdu
    a côté [de|d’]
    a couper le souffle
    a ?[si|très|trop]¿ court terme
    a ?[si|très|trop]¿ courte [échéance|portée]
    a couilles rabattues
    a >couteau [tiré|tirés]
    a [de|d’] ?[si|très|trop]¿ nombreuses reprises
    a des kilomètres à la ronde
    a dose homéopathique
    a double [titre|tranchant]
    a durée [déterminée|indéterminée|limitée]
    a en juger par [mon|ton|son|notre|votre|leur] expérience
    a en juger par [mon|ton|son|notre|votre|leur] expérience
    a en perdre haleine
    a en perdre la tête
    a ?[si|très|trop]¿ faible [allure|revenu]
    a ?[si|très|trop]¿ faible tirant d’ eau
    a feu et à sang
    a flanc [de|d’] [colline|montagne]
    a fleur [de|d’] peau
    a >fond [perdu+ses]
    a géométrie variable
    a gorge déployée
    a grand-peine
    a grande échelle
    a grands frais
    a ?[si|très|trop]¿ haut risque
    a ?[si|très|trop]¿ haute [altitude|voix]
    a ?[si|très|trop]¿ haute et intelligible voix
    a heure fixe
................................................................................
    a huis clos
    a intervalles [réguliers|irréguliers]
    a ?[si|très|trop]¿ juste [raison|titre]
    a l’ heure actuelle
    a l’ heure qu’ il est
    a l’ [accoutumée|amiable|arrache|avance|avenant|avenir|aveuglette|écart|emporte-pièce|évidence|étouffée|extérieur|improviste|intérieur|inverse|occasion|unanimité|unisson]
    a l’ air libre
    a l’ exclusion [de|d’] toute autre chose
    a l’ ordre du jour
    a l’ œil nu
    a l’ en croire
    a l’ un d’ entre eux
    a l’ un des leurs
    a l’ une d’ entre elles
    a l’ une des leurs
    a la [con|dérive|dérobée|diable|fois|mords-moi-le-nœud|papa|rescousse|sauvette|va-vite|volée]
    a la bonne franquette
    a la fin [de|d’] l’ an ?[passé|~^[0-9]{2,5}$]¿
    a la fin [de|d’] l’ année ?[passée|~^[0-9]{2,5}$]¿
    a la fin des années ~^[0-9]{2,5}$
    a la fin du mois [de|d’] {mois} ?[passé|prochain|~^[0-9]{2,5}$]¿
    a la limite du supportable
    a la lumière [de|d’] tout [ceci|cela|ça]
    a la petite semaine
    a la pointe du progrès
    a la queue leu leu
    a la surprise générale
    a la va vite
    a la virgule près
    a la [dérobée|manque|ramasse|redresse|renverse]
................................................................................
    a outrance
    a parler franc
    a part [entière|ça|cela|ceci]
    a partir [de|d’] [demain|là|maintenant|rien|aujourd’hui|hier|ici]
    a parts égales
    a pas [de|d’] [géant|loup|tortue|velours]
    a personne en danger
    a perte [de|d’] vue
    a ?[si|très|trop]¿ petit feu
    a ?[si|très|trop]¿ petite [dose|échelle]
    a ?[si|très|trop]¿ peu [de|d’] >chose près
    a peu près
    a pied d’ œuvre
    a pieds joints
    a pile ou face
    a plat ventre
    a plate couture
    a plein [régime|temps|nez]
    a pleins poumons
    a plus forte raison
    a plus d’ un titre
    a poil [court|dur|long|rêche]
    a point nommé
    a portée [de|d’] main
    a première vue
    a prix [cassé|cassés|>modique]
    a proprement parler
    a qui [de|d’] droit
    a qui mieux mieux
    a qui que ce soit
    a quelque distance
    a quelques exceptions près
    a ras >bord
    a ras [de|d’] terre
    a ras [du|le] sol
    a rude épreuve
    a >seul [>fin|>faim] [de|d’]
    a tel point
    a temps [plein|partiel|complet]
    a tête reposée
    a >tarif >réduit
    a taux [>fixe|>variable|>zéro|>nulle|nul+s]
    a titre [conservatoire|indicatif|informatif|grâcieux|personnel|posthume]
    a titre d’ exemple
    a tombeau ouvert
    a tort et à travers
    a tort ou à raison
    a tour [de|d’] [bras|rôle]
    a tous crins
    a tous points [de|d’] vue
    a tout [âge|crin|instant|jamais|moment|prix]
    a tout bout [de|d’] champ
    a tout le [moins|monde]
    a tout point [de|d’] vue
    a tout un chacun
    a toute [allure|berzingue|bride|épreuve|force|heure|vitesse|volée]
    a toutes jambes
    a toutes fins utiles
    a tribord
    a tu et à toi
    a un moment donné
................................................................................
    a vitesse grand V
    a vive allure
    a voix [haute|basse]
    a vol d’ oiseau
    a vrai dire
    a vue d’ œil
    a y [réfléchir|songer|penser]
    a y regarder [de|d’] plus près
        <<- /conf/ not value(<1, "|l’|n’|il|elle|on|y|") and not before("(?i)n’en +$")
        -1>> à              # Confusion probable : “a” est une forme conjugée du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

    a [mon|ton|son|notre|votre|leur] [cœur|corps] défendant
    a [mon|ton|son|notre|votre|leur] grand désarroi
    a [mon|ton|son|notre|votre|leur] [avis|côté|détriment|encontre|égard|insu|sujet|tour]
    a [ma|ta|sa|notre|votre|leur] grande [surprise|tristesse]
................................................................................
TEST: il va dans l’{{haut delà}}


# aile / elle
__conf_aile_elle__
    l’ [elle+s]
    [mon|son|ton|son|notre|votre|leur] [elle+s] [droite|gauche]
    une [elle+s] [de|d’|du] [poulet|poule|perdreau|canard|perdrix|pigeon|raie|papillon|voiture|bâtiment|château|manoir|palais]
        <<- /conf/ -2>> aile
        # Confusion probable : “elle” est un pronom personnel féminin. Pour les oiseaux, les avions ou les parties d’un bâtiment ou d’une armée, écrivez “aile”.|https://fr.wiktionary.org/wiki/aile

    [des|mes|tes|ses|ces|nos|vos] ([elle+s])
    les ([elle+s]) [de|des|du|d’]
    [sous|sur] leurs ([elle+s]) [<end>|,|$:R]
        <<- /conf/ -1>> ailes
................................................................................
TEST: L’hostie n’est pas le {{cor}} du Christ.
TEST: elle détestait son nouveau garde du {{cor}}
TEST: Elle souffla puissamment dans le {{corps}} de chasse.


# cou / coup / coût
__conf_coup_cout_cou1__
    [>cou|>coût|>cout] [de|d’] [>baguette|>barre|>bâton|>bec|>bélier|blues|>botte|>boule|>boutoir|>bol|>bite|>cœur|>chaud|>coude|>couteau|>dé|>dent|>déprime|>froid|fil|>foudre|>genou|>grâce|>griffe|>grisou|>gueule|>hache|>hanche|Jarnac|jus|>jeune|>klaxon|>main|maître|maitre|>massue|>marteau|>menton|>nostalgie|>pied|>poing|>poignard|>pouce|>pute|>queue|>rein|>rabot|>savate|>sang|>sabot|>sabre|>sifflet|>soleil|>sonde|>surin|>tête|>théâtre|>tonnerre|>torchon|>trique|>vent|vieux]
    [>cou|>coût|>cout] d’ [>éclat|>épée|>état|>épaule|œil|>estoc]
    [>cou|>coût|>cout] du sort
    [>cou|>coût|>cout] [dur|durs]
        <<- /conf/ -1>> coup|coups      # Confusion probable. Le coût est le prix d’une chose. Le cou est la partie joignant le tronc à la tête. Pour ce qui frappe, écrivez “coup”.

    [>cou|>coup] de [>base|revient|reviens|>distribution|>développement|>production|>maintenance|>construction|>fonctionnement|>fabrication|>financement|>formation|>renonciation|>stockage|>transaction|>transfert|>transport|>transformation|>viabilisation]
    [>cou|>coup] de la vie
................................................................................
    *WORD  dîtes  @:A¬:G
        <<- /conf/ morph(\1, ":[NA].*:[fe]:[pi]", ":G") -2>> dites      # Confusion probable : “dîtes” est une forme verbale de dire au subjonctif. Pour l’ajectif, écrivez “dites”.

TEST: Des armes {{dîtes}} létales.                                          ->> dites
TEST: usage débridé des armes dites létales
TEST: Vous dîtes “idiotes”, je dis “originales”.


# dont / don
__conf_dont_don__
    [celui|celle|ceux|celles] don
        <<- /conf/ --1>> dont                                   # Confusion probable. Un don est ce qui est donné. Pour le pronom relatif, écrivez “dont”.|https://fr.wiktionary.org/wiki/dont

    *WORD  *WORD  don  @:(?:D|B|Os)¬:A.*:[me]:[si]
        <<- /conf/ morph(\1, ":[DB]") and morph(\2, ":N", ":[GAWM]")
        -3>> dont                                               # Confusion probable. Un don est ce qui est donné. Pour le pronom relatif, écrivez “dont”.|https://fr.wiktionary.org/wiki/dont

    ce  don  @:(?:Os|M)             ?n’¿        >avoir  ?@[:WX]¿    besoin
    ce  don  je                     ?[ne|n’]¿   me      >souvenir
    ce  don  tu                     ?[ne|n’]¿   te      >souvenir
    ce  don  nous                   ?[ne|n’]¿   nous    >souvenir
    ce  don  vous                   ?[ne|n’]¿   vous    >souvenir
    ce  don  [il|elle|on|iel|$:M]   ?[ne|n’]¿   se      >souvenir
    ce  don  [ils|elles|iels]       ?[ne|n’]¿   se      >souvenir
        <<- /conf/ not value(>1, "|de|d’|des|du|") and not value(>2, "|de|d’|des|du|")
        -2>> dont                                               # Confusion probable. Un don est ce qui est donné. Pour le pronom relatif, écrivez “dont”.|https://fr.wiktionary.org/wiki/dont

TEST: celle {{don}} il est question est sublime                     ->> dont
TEST: ce partage {{don}} il est question                            ->> dont
TEST: trente hommes {{don}} deux sont malades                       ->> dont
TEST: ce {{don}} tu te souviens, c’est pas ça                       ->> dont
TEST: c’est ce {{don}} nous avons besoin                            ->> dont
TEST: ce don il a besoin de savoir qui lui offre
TEST: ce petit don je ne sais pas ce dont il s’agit.
TEST: ce dont on parle tous les jours


# dû / du
__ppas_dû_du__
    du  [à|a|au|aux]
        <<- /ppas/ \2.islower() -1>> dû                         # Confusion. Ce qui est dû.

    [mon|notre|votre]  du
................................................................................
        <<- /conf/ not value(<1, "|la|en|une|") and not value(>1, "|position|dance|")
        ->> pôle|pôles                                                      # Confusion probable. Le terme “pole” ne s’utilise que pour la “pole position” ou la “pole dance”.

TEST: il y a {{un}} {{pole}} d’activités pas loin d’ici.
TEST: il est parti en pole position.
TEST: elle fait de la pole dance.


# plutôt / plus tôt
__conf_plutôt_plus_tôt__
    le plutôt possible
        <<- /conf/ -2>> plus tôt                            # Confusion. Plus tard, plus tôt. Plutôt signifie “de préférence” ou “assez”.|https://fr.wiktionary.org/wiki/plut%C3%B4t

    [<start>|*WORD]  plus  tôt  que  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  $:Y
    [<start>|*WORD]  plus  tôt  que  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         $:Y
    [<start>|*WORD]  plus  tôt  que  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]             $:Y
    [<start>|*WORD]  plus  tôt  que  ?[ne|n’]¿  [lui|leur|y]                    en                          $:Y
        <<- /conf/ morph(\1, ":Y|<start>") -2:3>> plutôt   # Confusion probable. Si vous voulez dire faire quelque chose de préférence à autre chose, écrivez “plutôt”.|https://fr.wiktionary.org/wiki/plut%C3%B4t

TEST: Le {{plutôt}} possible sera le mieux
TEST: agir {{plus tôt}} que pleurer sur son sort.
TEST: {{plus tôt}} que leur donner raison, dénigre leur personne.
TEST: Viens le plus tôt possible.


# pomme / paume
__conf_pomme_paume__
    >tomber ?[pas|jamais|guère|peu]¿ dans les >paume
        <<- /conf/ --3:0>> dans les pommes                                  # Locution “tomber dans les pommes”, c’est-à-dire perdre connaissance.|https://fr.wiktionary.org/wiki/tomber_dans_les_pommes

    >jeu de >pomme
................................................................................

__conf_soi_soit_soie__
    [chez|sur|avec|pour] soit
    don de soit
    estime de soit
        <<- /conf/ not after(" soit ") --1>> soi                                                    # Confusion probable.

    [ça|cela|ceci] >aller ?$:W¿ de soit
        <<- /conf/ not after(" soit ") --1>> soi                                                    # Confusion probable.|https://fr.wiktionary.org/wiki/aller_de_soi

    en soit
        <<- /conf/ morph(>1, ":[GY]|<end>", ">à/") and not value(<1, "|il|on|elle|n’|m’|t’|s’|") and not before("(?i)quel(?:s|les?|) qu[’ ]$") and not after(" soit ")
        -2>> soi                                                                                    # Confusion probable.

    [soi|sois|soit|>soie]  >même
        <<- /conf/ morph(<1, ":[YQ]|>(?:avec|contre|par|pour|sur)/|<start>|>,") ->> soi-même        # Confusion probable : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.

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

TEST: chez {{soit}}, c’est presque toujours mieux.
TEST: ce n’est pas la philosophie en {{soit}} qui est problématique
TEST: quel que {{soie}} sa pensée, je refuse d’y accorder de l’attention.
TEST: Penser par {{soit même}}…
TEST: S’aimer {{soit-même}}, c’est le début d’une grande histoire d’amour. (Oscar Wilde)
TEST: pas sûr que {{sa}} {{soi}} terminé avant demain
TEST: Cela va presque de {{soit}}
TEST: Je regrette que l’on en soit encore à des considérations que je croyais dépassées
TEST: Quoi qu’il en soit
TEST: À moins qu’elle n’en soit la victime.
TEST: Je doute qu’il s’en soit sorti si aisément.
TEST: Je refuse, quoi qu’il en soit.
TEST: on ne s’étonne plus que le parquet de Paris en soit à agir sous l’effet de quelque urgence médiatique
TEST: Vous êtes soit pour soit contre, mais pas les deux en même temps
................................................................................
    en sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW]
        <<- /conf/ not value(<1, "|ils|elles|iels|leur|lui|nous|vous|m’|t’|s’|l’|") and not tag(<1, "_ceque_")
        -2>> son                                                # Confusion probable : “sont” est le verbe “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”.

    son [ceux|celles]
        <<- /conf/ not morph(<1, ":D.*:m:s") -1>> sont          # Confusion probable : “son” est un déterminant ou un nom masculin. Le verbe “être” à la 3ᵉ personne du pluriel s’écrit “sont”.

    [<start>|,|(]  [elles|certaines|quelques-uns|quelques-unes]  son  @:[AQW]
        <<- /conf/ -2>> \2,                                     # Confusion possible : ou vous confondez “son” et “sont”, ou vous devriez mettre une virgule après “\2”.
        <<- /conf/ -3>> sont                                    # Confusion possible : pour la conjugaison de “être” à la 3ᵉ personne du pluriel, écrivez “sont”.

TEST: ne leur {{son}} pas odieux.
TEST: Ces chiens me {{son}} odieux.
TEST: ces gens qui {{son}}, dans le meilleur des cas, des imbéciles ne peuvent nous aider.
TEST: {{sont}} {{pain}}
TEST: en {{sont}} {{absence}}
TEST: qui {{son}} ces gens ?
TEST: chez {{sont}} amis
TEST: il a perdu {{sont}} {{ami}}
TEST: ces gens {{son}} ceux qui nous mettent constamment dans la merde          ->> sont
TEST: à {{sont}} précis de mathématiques                                        ->> son
TEST: {{elles}} {{son}} là
TEST: elles s’en sont mal portées
TEST: ils en sont reconnaissants
TEST: sont loin, ces gens…
TEST: Il ne sait pas vraiment ce que sont la peur et la souffrance.
TEST: avec le mur du son ceux qui l’entendent.
TEST: Que sont nos valeurs profondes ?
TEST: comment sont la petite et son frère ?
................................................................................
    à en perdre la tête
    à ?[si|très|trop]¿ faible [allure|revenu]
    à ?[si|très|trop]¿ faible tirant d’ eau
    à feu et à sang
    à flanc de [colline|montagne]
    à fleur de peau
    à franchement parler
    à fonds perdus
    à géométrie variable
    à glacer le sang
    à glacer les sangs
    à gorge déployée
    à grande échelle
    à ?[si|très|trop]¿ grands frais
    à ?[si|très|trop]¿ haut risque
    à ?[si|très|trop]¿ haute [altitude|voix]
    à ?[si|très|trop]¿ haute et intelligible voix
    à heure fixe
    à hue et à dia
................................................................................
    comme d’ habitude
    comme toujours
    comme de juste
    comme bon [me|te|lui|leur|nous|vous] semble
    comme au bon vieux temps
    comme cul et chemise
    comme [frappé+ses] par la foudre
    comme gage [de|d’] bonne foi
    comme n’importe où ?ailleurs¿
    comme par [enchantement|magie]
    comme par un fait exprès
    comme pas deux
    comme peau de chagrin
    comme promis
    comme qui dirait
................................................................................
    [de|d’] siècle en siècle
    [de|d’] millénaire en millénaire
    [de|d’] décennie en décennie
    [demain|après-demain] ?[matin|soir|après-midi]¿
    avant demain ?[matin|soir|après-midi]¿
    debout
    derechef
    derrière tout [cela|ceci|ça]
    donc
    dorénavant
    déjà
    désormais
    depuis $:B [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis *NUM [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis belle lurette
................................................................................
    plus que [nécessaire|prévu|jamais]
    plus que d’ habitude
    plus que tout au monde
    plus que toute autre chose
    plusieurs fois
    plusieurs fois [de|d’] suite
    plutôt
    pour [ce|c’] [que|qu’] j’ en [sais|savais|sus|saurai|saurais]
    pour [ce|c’] [que|qu’] tu en [sais|savais|sus|sauras|saurais]
    pour [ce|c’] [que|qu’] [il|elle|on|iel] en [sait|savait|sut|saura|saurait]
    pour [ce|c’] [que|qu’] nous en [savons|savions|sûmes|saurons|saurions]
    pour [ce|c’] [que|qu’] vous en [savez|saviez|sûtes|saurez|sauriez]
    pour [ce|c’] [que|qu’] [ils|elles|iels] en [savent|savaient|surent|sauront|sauraient]
    pour [celui|celle|ceux|celles] et [celui|celle|ceux|celles] que [ça|cela|ceci] intéresse
    pour [celui|celle|ceux|celles] que [ça|cela|ceci] intéresse
    pour [ma|ta|sa|notre|votre|leur] [gouverne|part]
    pour [mon|ton|son|notre|votre|leur] propre [compte|bien]
    pour [m’|t’|s’|nous|vous] en rendre compte
    pour ainsi dire
    pour ce faire
................................................................................
    >acte d’ [achat|engagement]
    >acte [de|d’] gestion ?courante¿
    >acte [de|d’] procédure ?pénale¿
    >acte d’ état ?civil¿
    >administrateur >système
    >agence [de|d’] >voyage
    >agité du bocal
    >aide [de|d’] camp
    >aire d’ atterrissage
    >animal [de|d’] compagnie
    >appel au secours
    >appel à l’ aide
    >arc à poulies
    >arme à feu
    >armée [de|d’] l’ air
................................................................................
    [>chariot|>charriot] à [bagages|roulettes]
    >chasse à courre
    >chasse à l’ homme
    >chasse d’ eau
    >chasseur [de|d’] primes
    >chef [de|d’] file
    >chef d’ [état-major|entreprise]
    >chef d’ orchestre ?[moderne|symphonique]¿
    >chemin [de|d’] [traverse|fer]
    >chemise [de|d’] nuit
    >chemise sans >manche
    >chèque sans provision
    >chili con carne
    >chômage [de|d’] masse
    >chou à la crème ?[fouettée|diplomate|mousseline|patissière|pralinée]¿
................................................................................
    >crise de >nerf
    >cuillère à [café|soupe]
    >cure [de|d’] [désintoxication|désintox]
    >déclaration sur l’ honneur
    >délai [de|d’] [attente|carence|connexion|prescription|préavis|rétraction|rigueur]
    >demande d’ asile
    >descente aux [enfers|flambeaux]
    dieu tout-puissant
    [>dîner|>diner] aux chandelles
    >digne [de|d’] [confiance|foi]
    >digne [de|d’] ce nom
    >don en nature
    >donneur [de|d’] >leçon
    >dossier d’ inscription ?[administrative|scolaire]¿
    >dossier [de|d’] presse
................................................................................
    >lime à >ongle
    >liste d’ attente
    >lit à baldaquin
    >lit [de|d’] camp
    >livraison à domicile
    >livre [de|d’] [poche|chevet]
    >livret d’ épargne ?[bancaire|populaire|salariale]¿
    >loi d’ airain
    >longueur d’ avance
    >lune [de|d’] miel
    >machine à [café|coudre|écrire|laver|sous|voter]
    >machine à remonter le temps
    >machine [de|d’] guerre
    >maillot [de|d’] bain
    >main d’ œuvre
    >maison à colombages
    >maison [de|d’] [passe|retraite]
    >mal [de|d’] [tête|ventre|mer]
    >mandat [de|d’] [arrêt|dépôt]
    >marchand [de|d’] tapis
    >marchand [de|d’] fruits et légumes
    >marché aux puces
    >maréchal des [logis|logis-chef]
    >marin d’ eau douce
    >marge [de|d’] >manœuvre
    >marque [de|d’] fabrique
    >masque à [gaz|oxygène]
................................................................................
    >occasion en or ?massif¿
    >oiseau [de|d’] [malheur|nuit|proie]
    >oiseau [de|d’] mauvais augure
    >onde [de|d’] choc
    >ordre du jour
    orge [perlé|mondé|carré]
    >nuit [de|d’] noces
    >pacte de non-agression
    >pain [de|d’] mie
    >panier à linge

    >papier à [>lettre|musique]
    >parc à thème
    >parc d’ attractions
    >parole en l’ air
    >partie [de|d’] jambes en l’ air
    >passage à tabac
    >passation [de|d’] pouvoir
    >pâte à [accras|>beignet|>brioche|choux|>crêpe|donuts|frire|galettes|>gaufre|>gâteau|modeler|nouilles|pain|pizza|sel|tarte|tartiner]
    >pâté en [croute|croûte]
    >peur [de|d’] tous les diables
    >piano à queue
    >pièce à conviction
    >pièce [de|d’] [théâtre|monnaie]
    >pièce [de|d’] *NUM [>euro|>dollar|>centime|>cent|>livre|>shilling]
    >pince à linge
    >placard à [>balai|chaussures]
    >plan [A|B|C|cul]
    >planche [de|d’] salut
................................................................................
    >porte d’ entrée
    >pot [de|d’] [chambre|colle]
    >poudre aux yeux
    >pouvoir d’ achat
    >presse à >scandale
    preuve ?suffisante¿ du contraire
    preuves ?suffisantes¿ du contraire
    >pure comme [le|du] cristal
    prix [de|d’] revient
    quelqu’un d’ autre
    >question [de|d’] vie ou [de|d’] mort
    >rapport [de|d’] force
    >rat [de|d’] bibliothèque
    >rayon [de|d’] soleil
    >réaction en [chaîne|chaine]
................................................................................
    >seuil [de|d’] tolérance
    >seuil [de|d’] tolérance à la douleur
    >silo à [>grains|blé]
    >soldat d’ élite
    >sonnette d’ alarme
    >sortie [de|d’] secours
    >soue à >cochonne
    >sujet [de|d’] prédilection
    >suspension [de|d’] séance
    >système d’ exploitation
    >système D
    >tableau [de|d’] chasse
    >table à repasser
    >table [de|d’] [calcul|chevet|nuit]
    >taille *NUM
    tas [de|d’] ferraille ?rouillée¿
    >talon >aiguille
    tapis [de|d’] prière
    taux [de|d’] [abstention|absorption|alcool|alphabétisation|endettement|inflation|intérêt|imposition|occupation|ouverture|œstrogène|urée|usure|change|cholestérol|cholesterol|glycémie|fécondité|participation|testostérone|TVA]
    >témoin à charge
    tenants et aboutissants
................................................................................
    >vague à l’ âme
    >vecteur [>accélération|>position|>rotation|>vitesse]
    >véhicule [de|d’] location
    >vente à domicile
    >vente aux enchères
    >vérification [de|d’] routine
    vernis à ongles
    >ver [de|d’] terre
    >verre à pied
    >virage à [*NUM|:B] degrés
    >voie [de|d’] [recours|perdition]
    >vol à l’ étalage
    >vol à la [sauvette|tire]
    >vol à main armée
    >volée [de|d’] bois vert
................................................................................
    [daté+ses] du [1er|1ᵉʳ|1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12|13|14|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31] {mois} ?[prochain|passé|dernier|~^[0-9]{2,5}$]¿
    >droit comme un i
    >fort en gueule
    >fou de rage ?[contenue|retenue]¿
    >élu à la majarité absolue
    >haut comme [trois|3] pommes
    >haut en couleur
    [libéré+ses] sur parole
    >lent à la détente
    >mort de trouille
    >nu comme un ver
    >nu comme des vers
    >nul et non >avenu
    >noir comme la nuit
    >noir comme une nuit sans lune
    [réglé+ses] comme du papier à musique
    [remis+es] à plat
    >sain [de|d’] [corps|esprit]
    >sain [de|d’] [corps|esprit] et [de|d’] [corps|esprit]
    >têtu comme une [bourrique|mule]
    >têtu comme un [âne|bourriquot|mulet]
        <<- ~2:0>> *

    flambant >neuf
        <<- ~1>> *

    [>homme|>femme|>cinéaste|>politicien|>acteur|>auteur|>sculpteur|>compositeur|>musicien|>groupe|>romancier|>peintre|>photographe|>sportif|>philosophe|>intellectuel|>polémiste] à succès
    [>homme|>femme] d’ >affaire à succès
        <<- ~-2:0>> *

    [>bébé|fils|>fille|>enfant|>neveu|>nièce|>frère|>sœur] [de|d’] $:B [mois|ans]
    [>grand-père|>grand-mère|>père|>mère|>papa|>maman|>oncle|>tante|>frère|>sœur|beau-frère|belle-sœur|>nièce|>neveu|>cousin] [de|d’] $:B ans
................................................................................
    [les|mes|tes|ses|nos|vos|leurs]  @:[NA].*:[pi]¬:[123][sp]  les  plus  @:A.*:[pi]
        <<- ~3:4>> *

    [>être|>avoir]  le  [plus|moins]  @:A¬:([me]:[si]|G)
        <<- morph(\1, ":V") ~2:3>> *

    bien sûr
        <<- not value(>1, "|de|d’|des|du|") ~>> *

    à peu près   @:[AW]
        <<- ~1:3>> *

    à [demi|peine]              @:[AW]
    [super|fort] [bien|mal]     @:[AW]
    depuis peu                  @:[AW]
................................................................................
    >parer a toute éventualité
    >passer a tabac
    >percer a jour
    >prendre a la légère
    >prêter a >confusion
    >réduire a néant
    >saigner a blanc
    >sentir a l’ aise
    >tenir a [carreau|cœur|distance]
    >tirer a blanc
    >tomber a [pic|point]
    >tirer a blanc
    >tourner a l’ aigre
    >vendre a >perte
    >venir a bout
    [>venir|>revenir] a point
        <<- /conf/ -2>> à               # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

    >appartenir a
    >appartenir en propre a
    >avoir vocation a
    >donner [sens|suite] a
    enclin a
    en être [réduit+ses] a
    en proie a
    >laisser libre cours a
    >parvenir a
    >prêter attention a
        <<- /conf/ \-1 != "A" and not tag_before(\1, "_àCOI_") --1>> à      # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

    >appeler a
    >avoir du mal a
    >commencer a
    >condamner a
    >dire [adieu|merde] a
    >faire confiance a
    >mentir a
    >préparer a
    >prêter serment a
    >rendre service a
    >réussir a
    >viser a
        <<- /conf/ not tag_before(\1, "_propsub_") and not morph(\1, ":Y")
        --1>> à                                                             # Confusion probable : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

    @:V¬:[YGNAWM]  a
        <<- /conf/ \-1 != "A" and not tag_before(\1, "_propsub_") and not morph(>1, ":Q")
        --1>> à                                                             # Confusion probable : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

    [/VCint|/VCimp]  a
        <<- /conf/ not value(\1, "|rendez-vous|") --1>> à                   # Confusion : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0
................................................................................
    [>air|>ère] [de|d’]  [accueil|atterrissage|autoroute|>jeu|repos]
        <<- /conf/ -1>> aire|aires  # Confusion. Une ère est une époque. L’air est un gaz, une apparence ou une musique. Pour évoquer une surface, écrivez “aire”.|https://fr.wiktionary.org/wiki/aire

    >baptême de l’ [ère|aire]
    >libre comme l’ [ère|aire]
        <<- /conf/ --1>> air        # Confusion. Une ère est une époque. L’aire est une surface. Pour parler de l’atmosphère, écrivez “air”.|https://fr.wiktionary.org/wiki/air

    >foutre en l’ [ère|air]
        <<- /conf/ --1>> air        # Confusion. Locution “foutre en l’air”.|https://fr.wiktionary.org/wiki/foutre_en_l%E2%80%99air

TEST: L’{{aire}} du pétrole n’est pas encore terminée.
TEST: Ce sera un jour dans l’{{ère}} du temps
TEST: il a l’{{aire}} d’un plouc.
TEST: il en a tout l’{{ère}}
TEST: on s’arrêtera sur l’{{air}} d’autoroute
TEST: baptême de l’{{aire}}
TEST: il va se foutre en l’{{ère}} si ça continue comme ça.


# auspice / hospice
__conf_auspices_hospices__
    sous [les|de|des|ces] ?*WORD¿ hospices
        <<- /conf/ --1>> auspices       # Confusion probable. L’hospice est un centre de soins.|https://fr.wiktionary.org/wiki/auspice

................................................................................
TEST: L’hôtel {{ou}} ils sont allés l’été dernier.
TEST: une chambre {{ou}} nous n’avons rien trouvé


## Accord et incohérences
__ppas_sont_adj__
    sont  *WORD
        <<- /ppas/ morph(\2, ":V[123]", ":(?:N|A|Q|W|G|3p)") and not tag_before(\1, "_ceque_")
        -2>> =suggVerbPpas(\2, ":m:p")                      # Incohérence : “\2” n’est pas un participe passé.

TEST: après avoir mis à jour sont {{profile}}.
TEST: maintenir en confinement certaines personnes sous prétexte qu’elles sont à risques serait une mesure inconstitutionnelle et discriminatoire.



!!
!!
!!!! Conjugaisons nous / vous (2ᵉ partie)                                                         !!
!!
................................................................................

    >faire  attention  [à|a]  ce  [que|qu’]  @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":S", \-2)                                             # Après “faire attention à ce que”, le verbe doit être au subjonctif.

    >tenir  [à|a]  ce  [que|qu’]  @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":S", \-2)                                             # Après “tenir à ce que”, le verbe doit être au subjonctif.

    >veiller  [à|a]  ce  [que|qu’]  @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ not value(<1, "|la|") --1>> =suggVerbMode(\-1, ":S", \-2)                       # Après “veiller à ce que”, le verbe doit être au subjonctif.

    >douter  [que|qu’]  @:(?:Os|M)  @:I¬:(?:[GYSK]|If)
        <<- /vmode/ not tag(\1, "upron") and not tag(\1, "neg") and morph(\1, ":V", ":N")
        --1>> =suggVerbMode(\-1, ":S", \-2)                                                         # Après “\1 que”, ce verbe devrait être au subjonctif.

    [il|ça|cela]  [peut|pouvait]  [que|qu’]  @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ tag(\2, "upron") --1>> =suggVerbMode(\-1, ":S", \-2)                            # Après “\1 se peut que”, le verbe devrait être au subjonctif.

................................................................................
TEST: peu s’en est fallu qu’il {{devient}} estropié.
TEST: je m’étonne qu’il {{est}} aussi fragile
TEST: elle a envie qu’il {{est}} intelligent.
TEST: il importera que nous {{devenons}} prêts.
TEST: prends garde que vous {{revenez}} en un seul morceau.
TEST: faites attention à ce qu’elle ne {{devient}} pas timorée.
TEST: je tiens à ce que vous {{devenez}} grands.
TEST: Veille à ce qu’il y {{est}} des gâteaux.
TEST: Je ne doute pas qu’ils réussiront leur mission.
TEST: Je me doutais bien qu’Apple pourrait marcher
TEST: Je me doutais bien qu’elle me détestait
TEST: Je veux que tu sois prudent.
TEST: Je souhaitais que tu fusses présent.
TEST: Je souhaite qu’il apprenne le français.
TEST: Je ne permets pas que tu sois imprudent.