Grammalecte  Check-in [757f44a2f3]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[fr] couleurs par défaut + options manquantes sur certaines règles
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256:757f44a2f3499542b3879c7c070b8b2cdbb1f928e1351cc4a2864f9310b0a044
User & Date: olr 2018-09-25 15:49:40
Context
2018-09-25
15:51
[core][py] gc engine: no color by default (type is not certain) check-in: cdb1937a91 user: olr tags: core, trunk
15:49
[fr] couleurs par défaut + options manquantes sur certaines règles check-in: 757f44a2f3 user: olr tags: fr, trunk
12:02
[lo] paramater for colors check-in: 1249b779da user: olr tags: lo, trunk
Changes

Changes to gc_lang/fr/rules.grx.

108
109
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
....
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
....
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
....
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
....
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
....
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
....
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
....
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
....
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
....
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
....
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
.....
10417
10418
10419
10420
10421
10422
10423
10424
10425
10426
10427
10428
10429
10430
10431
10432
10433
10434
10435
10436
10437
10438
.....
12388
12389
12390
12391
12392
12393
12394
12395
12396
12397
12398
12399
12400
12401
12402
.....
13714
13715
13716
13717
13718
13719
13720
13721
13722
13723
13724
13725
13726
13727
13728
.....
13731
13732
13733
13734
13735
13736
13737
13738
13739
13740
13741
13742
13743
13744
13745
.....
16092
16093
16094
16095
16096
16097
16098
16099
16100
16101
16102
16103
16104
16105
16106
16107
16108
16109
16110
16111
.....
16603
16604
16605
16606
16607
16608
16609
16610
16611
16612
16613
16614
16615
16616
16617
COLOR/blue:         210,50,50
COLOR/fuschia:      300,30,40
COLOR/cyan:         180,50,40
COLOR/grey:         0,50,50

# COLORS are must be described with the HSL format (0-360, 0-100 %, 0-100 %) [don’t write the sign %]
OPTCOLORTHEME:      Default     Writer
OPTCOLOR/typo:      grey        orange
OPTCOLOR/apos:      grey        orange2
OPTCOLOR/esp:       grey        orange
OPTCOLOR/tab:       grey        orange
OPTCOLOR/nbsp:      grey        orange
OPTCOLOR/tu:        grey        orange
OPTCOLOR/maj:       grey        orange
OPTCOLOR/num:       grey        orange
OPTCOLOR/virg:      grey        orange
OPTCOLOR/unit:      grey        orange
OPTCOLOR/nf:        grey        orange
OPTCOLOR/liga:      grey        orange
OPTCOLOR/mapos:     grey        orange
OPTCOLOR/chim:      grey        orange
OPTCOLOR/ocr:       grey        violet
OPTCOLOR/conf:      grey        violet
OPTCOLOR/sgpl:      grey        blue
OPTCOLOR/gn:        grey        blue
OPTCOLOR/infi:      grey        fuschia
OPTCOLOR/conj:      grey        fuschia
OPTCOLOR/ppas:      grey        fuschia
OPTCOLOR/imp:       grey        fuschia
OPTCOLOR/inte:      grey        fuschia
OPTCOLOR/vmode:     grey        fuschia
OPTCOLOR/bs:        grey        cyan
OPTCOLOR/pleo:      grey        cyan
OPTCOLOR/redon1:    grey        cyan
OPTCOLOR/redon2:    grey        cyan
OPTCOLOR/neg:       grey        cyan
OPTCOLOR/date:      grey        cyan
OPTCOLOR/mc:        grey        cyan


OPTDEFAULTUILANG: fr_FR

# Labels
OPTLANG/fr_FR:      Grammalecte (Français)
OPTLABEL/basic:     Typographie
................................................................................
!!
!!!! Élisions                                                                                     !!
!!
!!

__typo_élisions_manquantes__
    [le|la|de]  ~^[aâeéêiîoôu].
        <<- space_after(\1, 1, 1) and not re.search("(?i)^(?:onz[ei]|énième|iourte|ouistiti|ouate|one-?step|ouf|Ouagadougou|I(?:I|V|X|er|ᵉʳ|ʳᵉ|è?re))", \2) and not morph(\2, ":G")
        -1:.2>> =\1[0:1]+"’"                                                # Élision de l’article devant un mot commençant par une voyelle.|http://fr.wikipedia.org/wiki/Élision

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

    que [il|ils|elle|elles|on]
        <<- /typo/ space_after(\1, 1, 1) -1:.2>> qu’                        # Il faut élider “que” et l’accoler au pronom.|http://fr.wikipedia.org/wiki/Élision
................................................................................
        <<- /typo/ ->> \1ᵉ          # Nombre ordinal romain singulier. Exemples : 2ᵉ, 3ᵉ, 4ᵉ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271

    ~^[IVXLCM]{1,10}$  [es|ès|ièmes|iemes|èmes|emes]
        <<- /typo/ ->> \1ᵉˢ         # Nombre ordinal romain pluriel. Exemples : 2ᵉˢ, 3ᵉˢ, 4ᵉˢ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271

    ~^[IVXLCM]{1,10}(?:è|i?[èe]me)s?$
        <<- /typo/ not morph(\1, ":G") >>>
        <<- \1.endswith("s")
        ->> =\1.replace("mes", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉˢ" # Nombre ordinal romain pluriel. Exemples : IIᵉˢ, IIIᵉˢ, IVᵉˢ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271
        <<- __else__
        ->> =\1.replace("me", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉ"   # Nombre ordinal romain singulier. Exemples : IIᵉ, IIIᵉ, IVᵉ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271

TEST: François {{Iier}}                         ->> Iᵉʳ
TEST: le {{IInd}} siècle                        ->> IIᵈ
TEST: le {{VIième}} siècle                      ->> VIᵉ
TEST: Le {{XXIème}} siècle.                     ->> XXIᵉ
TEST: le {{XXè}} siècle.                        ->> XXᵉ
................................................................................
!!!! Incohérences de base                                                                         !!
!!
!!

### double négation
__double_négation__
    pas [personne|aucun|aucune|jamais]
        <<- not morph(<1, ":D.*:[me]") ->> \1|pas, \1
        # Double négation : les mots « pas \1 » ne devraient pas se succéder. Si ces mots appartiennent à des propositions distinctes, une virgule est peut-être préférable.

TEST: Ce que tu ne fais {{pas jamais}}.


### incohérences globales (attention à la casse du 2e mot, car beaucoup de sigles peuvent tromper)
__incohérences_globales__
................................................................................

__conf_déterminant_fem_sing_verbe__
    [ma|ta|cette|ladite]  @:(?:Y|[123][sp])¬:[NA]
        <<- /conf/ \2.islower() -2>> =suggSimil(\2, ":[NA]:[fe]:[si]", True)                        # Incohérence avec « \1 » : « \2 » est un verbe.

    sa  @:(?:Y|[123][sp])¬:(?:N.*:[fe]|A|W)
        <<- /conf/ \2.islower() >>>
        <<- morph(\2, "V.....[pqx]") -1>> ça|se                                                     # Confusion : « \2 » est un verbe. Exemples : sa jambe, ça vient. (Une faute de frappe peut-être ?)
        <<- __else__ -1>> ça                                                                        # Confusion : « \2 » est un verbe. Exemples : sa jambe, ça vient.
        <<- hasSimil(\2) -2>> =suggSimil(\2, ":[NA]:[fe]:[si]", True)                               # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: Cette {{pèle}} est trop fragile.
TEST: {{sa}} devient difficile.
TEST: il me tendit {{sa}} {{pèche}}.
TEST: {{sa}} prend du temps.                                                  ->> ça|se
TEST: {{çà}} va                                                               ->> ça
TEST: {{sa}} va                                                               ->> ça
................................................................................

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

    de  la  *WORD
        <<- /conf/ morph(\3, ":[123][sp]", ":[NAQ]") and not \3.istitle() >>>
        <<- morph(\3, ":V1.*:(?:Iq|Ip:2p)", ":1p") -3>> =suggVerbInfi(\3)               # Incohérence avec “\1 \2” : mettez le verbe à l’infinitif (à moins qu’il y ait confusion avec un nom féminin).
        <<- __else__ -3>> =suggSimil(\3, ":(?:[NA]:[fe]:[si])", False)                  # Incohérence avec “\1 \2” : “\3” est un verbe.

TEST: les petits esprits de la {{pensait}} religieuse
TEST: {{de le}} vin                                           ->> du
TEST: il n’est pas interdit de le {{pensait}}
TEST: de l’{{entra}}
TEST: par {{bloque}} de données
TEST: il s’agit de {{mette}} en évidence.
................................................................................

    en   se  @:[123][sp]¬:[PY]
        <<- /conf/ morph(\3, ":3p") -3>> =suggVerb(\3, ":P")                                        # Incohérence : « en \1 \2 »… Vouliez-vous écrire le verbe au participe présent ?
        <<- /conf/ not morph(\3, ":[NA]") -1:2>> "s’en "                                            # Incohérence : vouliez-vous écrire « \2’en » ?

    en   n’  @:[123][sp]¬:[PY]
        <<- /conf/ not value(\3, "|importe|") >>>
        <<- morph(\3, ":3p") -3>> =suggVerb(\3, ":P")                                               # Incohérence : « en \1 \2 »… Vouliez-vous écrire le verbe au participe présent ?
        <<- -1:2>> "n’en "                                                                          # Incohérence : vouliez-vous écrire « \2’en » ?

TEST: {{en t’}}ait donné tant.                          ->> "t’en "
TEST: {{en n’}}{{envoient}} que peu.
TEST: il {{en me}} donne beaucoup.                      ->> m’en
TEST: {{en n’}}{{abordent}} la côte, nous vîmes le désastre.
TEST: toute chose pourrait finalement advenir indifféremment en n’importe quel point du globe

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

    à  les  @:[NAQ]¬:(?:Y|Oo)
        <<- /conf/ -1:2>> a les|aux
        # Confusion. Ou vous confondez “a” (préposition) avec “a” (avoir), ou vous devez employer “aux”. Exemple : Elle _a_ donné du travail _aux_ employés _à_ profusion.

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

TEST: Ce fâcheux, comme à son habitude, les {{à}} ennuyés à mourir.
TEST: Lui l’{{à}} pris par surprise.
TEST: elle n’y {{à}} pas droit.
TEST: il y {{à}} des pertes.
TEST: ce qui {{à}} pris tant de valeur, c’est…
TEST: Cette femme {{à}} été confondue avec une autre.
................................................................................
    tout a fait
    jusqu’ a
    pas a pas
        <<- /conf/ -2>> à                                           # Confusion : “a” est une forme conjugée de “avoir”. Pour la préposition, écrivez “à”.

    a [moi|toi|eux|elles]
    a [lui|elle|nous|vous]  <end>
        <<- not morph(<1, ":Oo|>(?:il|elle)") and not value(<1, "|n’|m’|t’|")
        -1>> à                                                      # Confusion probable : “a” est une forme conjuguée du verbe “avoir”. Pour la préposition, écrivez “à”.

TEST: Je le donne {{a}} toi.
TEST: Personne {{a}} part Tom ne connaît son adresse
TEST: ce qu’elles feront alors {{a coup sûr}}, difficile de le devenir.
TEST: Face {{a}} ces gens, il ne pensait pas pouvoir réussir
TEST: c’est grâce {{a}} nous que vous y êtes parvenus
................................................................................
TEST: il se sentait de nouveau homme
TEST: il se sentait à nouveau homme


# nulle part
__conf_nulle_part__
    nul part
        <<- not morph(<1, ":D.*:m") ->> nulle part                             # Confusion : pour dire “en aucun lieu”, écrivez “nulle part”.

TEST: car {{nul part}} ailleurs, on n’en trouve une telle concentration


# on / ont
__conf_on_ont__
    on  @:W¬:3s
................................................................................
TEST: Une étude de 2005 publiée dans le Journal
TEST: Les cinq variantes de la couverture du magazine Wired d’avril 2016 consacrée à Silicon Valley.
TEST: c’est donc la cinquième en 50 ans


__purge_un_nombre__
    un  *NUM  @:A.*:s¬:G
        <<-  ~2>> *

TEST: l’équipe veut aussi voir dans la lettre le nombre d’or, un symbole d’harmonie, ainsi qu’un 6 retourné.


## moi/toi/lui/elle/nous/vous/eux/elles seul·e·s
__purge_pronom_seul__
    [moi|toi]       [seul|seule]
................................................................................
        <<- /gn/ morph(\3, "@:[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\2)          # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p") -3>> =suggMasSing(\3)                          # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

    *WORD  le  *WORD
        <<- /gn/ morph(\2, ":D") >>>
        <<- morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
            or ( morph(\3, ":[NA].*:f", ":[me]") and morph(\1, ":R", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -2>> =suggLesLa(\2)                                                                         # Accord de genre erroné : « \3 » est féminin.
        <<- __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                                 # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- __else__ and morph(\3, ":[NA].*:p", "*")
            or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -3>> =suggMasSing(\3)                                                                       # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- __also__ -2>> les                                                                       # Accord de nombre erroné : « \3 » est au pluriel.

    <start>  le  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\2)                     # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

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

# content / contant / comptant
__conf_content_comptant__
    >avoir ?tout¿ [mon|ton|son|notre|votre|leur] ([comptant|contant])
        <<- /conf/ -1>> content                             # Confusion. Avoir (tout) son content…|https://fr.wiktionary.org/wiki/content#Nom_commun

    argent [content|contant]
        <<- morph(<1, ":[VR]") -2>> comptant                # Confusion probable.|https://fr.wiktionary.org/wiki/argent_comptant

TEST: Elle a déjà eu tout son {{comptant}} de problèmes.
TEST: On paye toujours argent {{content}}.


# côté / coté
__conf_côté_coté__
................................................................................


!!!! Adverbes après verbe                                                                         !!

# fort
__sgpl_verbe_fort__
    forts
        <<- morph(<1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q)|>(?:affirmer|trouver|croire|désirer|estime|préférer|penser|imaginer|voir|vouloir|aimer|adorer|souhaiter)/")
            and not morph(>1, ":A.*:[me]:[pi]")
        ->> fort                                                # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.

TEST: ces emmerdeurs crient bien trop {{forts}}
TEST: ces animaux paraissent forts, mais ils sont faibles.
TEST: ils sont forts, ces gars-là.
TEST: ils se croient forts.
................................................................................
TEST: les écarts ont été plus forts en une génération
TEST: Avec le même nombre de bulletins, les xénophobes apparaîtront plus forts.


# bien
__sgpl_verbe_bien__
    biens
        <<- morph(<1, ":V", ":D.*:p|:A.*:p") ->> bien           # Confusion probable. Ici, “bien” est un adverbe, donc invariable.

TEST: Ils vont {{biens}}.
TEST: Elles travaillaient vraiment {{biens}}.
TEST: Il ne comprenait vraiment pas très {{biens}} ces principes de base.
TEST: Il a de grands biens.
TEST: Ce sont des biens de peu de valeur.

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


## 3sg
__conj_elle__
    elle  @:V¬:(?:3s|P|G)
        <<- /conj/ not morph(<1, ":R|>(?:et|ou)") and not (morph(\2, ":Q") and morph(<1, ":V0.*:3s"))
        -2>> =suggVerb(\2, ":3s")                               # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier.
        <<- __also__ and morph(\2, ":3p") -1>> elles            # Accord avec “\2”.

    elle  qui  @:V¬:(?:3s|P|G)
        <<- /conj/ not morph(<1, ":R|>(?:et|ou)")
        -3>> =suggVerb(\3, ":3s")                               # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier.
        <<- __also__ and morph(\3, ":3p") -1>> elles            # Accord avec “\3”.

TEST: Elle {{conquis}}.
TEST: Elle {{finis}}.
TEST: Elle {{pâlis}}.
TEST: {{Elles}} {{donne}} des leçons.
TEST: {{Elle}} ne nous {{croient}} jamais.
TEST: {{elle}} {{sont}} parties.
................................................................................
# on / ont
__conf_ont!6__
    ils  on
    [eux|ceux|elles|celles]  qui  on
        <<- /conf/ --1>> ont                                    # Confusion probable : “on” est un pronom personnel. Pour la conjugaison du verbe “avoir”, écrivez “on”.

    [elles|ceux-ci|ceux-là|celles-ci|celles-là]  on
        <<- not morph(<1, ":[RV]") -2>> ont                     # Confusion probable : “on” est un pronom personnel. Pour la conjugaison du verbe “avoir”, écrivez “on”.

TEST: celles-là {{on}} {{vraiment}} un problème avec la religion.
TEST: j’ai, tu as, ils ont, elles {{on}}
TEST: ces gens-là ils {{on}} {{raison}} plus souvent que la plupart des gens.
TEST: Ils soutiennent ceux qui {{on}} {{tant}} de raison d’être en colère.
TEST: Or parmi celles-ci on trouve typiquement d’un côté les structures








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







 







|







 







|

|







 







|







 







|
|
|







 







|
|







 







|
|







 







|
|
|
|
|
|
|







 







|







 







|







 







|







 







|


|
|


|







 







|







 







|







 







|







 







|




|







 







|







108
109
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
....
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
....
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
....
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
....
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
....
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
....
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
....
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
....
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
....
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
....
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
.....
10417
10418
10419
10420
10421
10422
10423
10424
10425
10426
10427
10428
10429
10430
10431
10432
10433
10434
10435
10436
10437
10438
.....
12388
12389
12390
12391
12392
12393
12394
12395
12396
12397
12398
12399
12400
12401
12402
.....
13714
13715
13716
13717
13718
13719
13720
13721
13722
13723
13724
13725
13726
13727
13728
.....
13731
13732
13733
13734
13735
13736
13737
13738
13739
13740
13741
13742
13743
13744
13745
.....
16092
16093
16094
16095
16096
16097
16098
16099
16100
16101
16102
16103
16104
16105
16106
16107
16108
16109
16110
16111
.....
16603
16604
16605
16606
16607
16608
16609
16610
16611
16612
16613
16614
16615
16616
16617
COLOR/blue:         210,50,50
COLOR/fuschia:      300,30,40
COLOR/cyan:         180,50,40
COLOR/grey:         0,50,50

# COLORS are must be described with the HSL format (0-360, 0-100 %, 0-100 %) [don’t write the sign %]
OPTCOLORTHEME:      Default     Writer
OPTCOLOR/typo:      orange      orange
OPTCOLOR/apos:      orange2     orange2
OPTCOLOR/esp:       orange      orange
OPTCOLOR/tab:       orange      orange
OPTCOLOR/nbsp:      orange      orange
OPTCOLOR/tu:        orange      orange
OPTCOLOR/maj:       orange      orange
OPTCOLOR/num:       orange      orange
OPTCOLOR/virg:      orange      orange
OPTCOLOR/unit:      orange      orange
OPTCOLOR/nf:        orange      orange
OPTCOLOR/liga:      orange      orange
OPTCOLOR/mapos:     orange      orange
OPTCOLOR/chim:      orange      orange
OPTCOLOR/ocr:       violet      violet
OPTCOLOR/conf:      violet      violet
OPTCOLOR/sgpl:      blue        blue
OPTCOLOR/gn:        blue        blue
OPTCOLOR/infi:      fuschia     fuschia
OPTCOLOR/conj:      fuschia     fuschia
OPTCOLOR/ppas:      fuschia     fuschia
OPTCOLOR/imp:       fuschia     fuschia
OPTCOLOR/inte:      fuschia     fuschia
OPTCOLOR/vmode:     fuschia     fuschia
OPTCOLOR/bs:        cyan        cyan
OPTCOLOR/pleo:      cyan        cyan
OPTCOLOR/redon1:    cyan        cyan
OPTCOLOR/redon2:    cyan        cyan
OPTCOLOR/neg:       cyan        cyan
OPTCOLOR/date:      cyan        cyan
OPTCOLOR/mc:        cyan        cyan


OPTDEFAULTUILANG: fr_FR

# Labels
OPTLANG/fr_FR:      Grammalecte (Français)
OPTLABEL/basic:     Typographie
................................................................................
!!
!!!! Élisions                                                                                     !!
!!
!!

__typo_élisions_manquantes__
    [le|la|de]  ~^[aâeéêiîoôu].
        <<- /typo/ space_after(\1, 1, 1) and not re.search("(?i)^(?:onz[ei]|énième|iourte|ouistiti|ouate|one-?step|ouf|Ouagadougou|I(?:I|V|X|er|ᵉʳ|ʳᵉ|è?re))", \2) and not morph(\2, ":G")
        -1:.2>> =\1[0:1]+"’"                                                # Élision de l’article devant un mot commençant par une voyelle.|http://fr.wikipedia.org/wiki/Élision

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

    que [il|ils|elle|elles|on]
        <<- /typo/ space_after(\1, 1, 1) -1:.2>> qu’                        # Il faut élider “que” et l’accoler au pronom.|http://fr.wikipedia.org/wiki/Élision
................................................................................
        <<- /typo/ ->> \1ᵉ          # Nombre ordinal romain singulier. Exemples : 2ᵉ, 3ᵉ, 4ᵉ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271

    ~^[IVXLCM]{1,10}$  [es|ès|ièmes|iemes|èmes|emes]
        <<- /typo/ ->> \1ᵉˢ         # Nombre ordinal romain pluriel. Exemples : 2ᵉˢ, 3ᵉˢ, 4ᵉˢ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271

    ~^[IVXLCM]{1,10}(?:è|i?[èe]me)s?$
        <<- /typo/ not morph(\1, ":G") >>>
        <<- /typo/ \1.endswith("s")
        ->> =\1.replace("mes", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉˢ" # Nombre ordinal romain pluriel. Exemples : IIᵉˢ, IIIᵉˢ, IVᵉˢ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271
        <<- /typo/ __else__
        ->> =\1.replace("me", "").replace("è", "").replace("e", "").replace("i", "") + "ᵉ"   # Nombre ordinal romain singulier. Exemples : IIᵉ, IIIᵉ, IVᵉ…|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4271

TEST: François {{Iier}}                         ->> Iᵉʳ
TEST: le {{IInd}} siècle                        ->> IIᵈ
TEST: le {{VIième}} siècle                      ->> VIᵉ
TEST: Le {{XXIème}} siècle.                     ->> XXIᵉ
TEST: le {{XXè}} siècle.                        ->> XXᵉ
................................................................................
!!!! Incohérences de base                                                                         !!
!!
!!

### double négation
__double_négation__
    pas [personne|aucun|aucune|jamais]
        <<- /conf/ not morph(<1, ":D.*:[me]") ->> \1|pas, \1
        # Double négation : les mots « pas \1 » ne devraient pas se succéder. Si ces mots appartiennent à des propositions distinctes, une virgule est peut-être préférable.

TEST: Ce que tu ne fais {{pas jamais}}.


### incohérences globales (attention à la casse du 2e mot, car beaucoup de sigles peuvent tromper)
__incohérences_globales__
................................................................................

__conf_déterminant_fem_sing_verbe__
    [ma|ta|cette|ladite]  @:(?:Y|[123][sp])¬:[NA]
        <<- /conf/ \2.islower() -2>> =suggSimil(\2, ":[NA]:[fe]:[si]", True)                        # Incohérence avec « \1 » : « \2 » est un verbe.

    sa  @:(?:Y|[123][sp])¬:(?:N.*:[fe]|A|W)
        <<- /conf/ \2.islower() >>>
        <<- /conf/ morph(\2, "V.....[pqx]") -1>> ça|se                                              # Confusion : « \2 » est un verbe. Exemples : sa jambe, ça vient. (Une faute de frappe peut-être ?)
        <<- /conf/ __else__ -1>> ça                                                                 # Confusion : « \2 » est un verbe. Exemples : sa jambe, ça vient.
        <<- /conf/ hasSimil(\2) -2>> =suggSimil(\2, ":[NA]:[fe]:[si]", True)                        # Incohérence avec « \1 » : « \2 » est un verbe.

TEST: Cette {{pèle}} est trop fragile.
TEST: {{sa}} devient difficile.
TEST: il me tendit {{sa}} {{pèche}}.
TEST: {{sa}} prend du temps.                                                  ->> ça|se
TEST: {{çà}} va                                                               ->> ça
TEST: {{sa}} va                                                               ->> ça
................................................................................

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

    de  la  *WORD
        <<- /conf/ morph(\3, ":[123][sp]", ":[NAQ]") and not \3.istitle() >>>
        <<- /conf/ morph(\3, ":V1.*:(?:Iq|Ip:2p)", ":1p") -3>> =suggVerbInfi(\3)                # Incohérence avec “\1 \2” : mettez le verbe à l’infinitif (à moins qu’il y ait confusion avec un nom féminin).
        <<- /conf/ __else__ -3>> =suggSimil(\3, ":(?:[NA]:[fe]:[si])", False)                   # Incohérence avec “\1 \2” : “\3” est un verbe.

TEST: les petits esprits de la {{pensait}} religieuse
TEST: {{de le}} vin                                           ->> du
TEST: il n’est pas interdit de le {{pensait}}
TEST: de l’{{entra}}
TEST: par {{bloque}} de données
TEST: il s’agit de {{mette}} en évidence.
................................................................................

    en   se  @:[123][sp]¬:[PY]
        <<- /conf/ morph(\3, ":3p") -3>> =suggVerb(\3, ":P")                                        # Incohérence : « en \1 \2 »… Vouliez-vous écrire le verbe au participe présent ?
        <<- /conf/ not morph(\3, ":[NA]") -1:2>> "s’en "                                            # Incohérence : vouliez-vous écrire « \2’en » ?

    en   n’  @:[123][sp]¬:[PY]
        <<- /conf/ not value(\3, "|importe|") >>>
        <<- /conf/ morph(\3, ":3p") -3>> =suggVerb(\3, ":P")                                        # Incohérence : « en \1 \2 »… Vouliez-vous écrire le verbe au participe présent ?
        <<- /conf/ -1:2>> "n’en "                                                                   # Incohérence : vouliez-vous écrire « \2’en » ?

TEST: {{en t’}}ait donné tant.                          ->> "t’en "
TEST: {{en n’}}{{envoient}} que peu.
TEST: il {{en me}} donne beaucoup.                      ->> m’en
TEST: {{en n’}}{{abordent}} la côte, nous vîmes le désastre.
TEST: toute chose pourrait finalement advenir indifféremment en n’importe quel point du globe

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

    à  les  @:[NAQ]¬:(?:Y|Oo)
        <<- /conf/ -1:2>> a les|aux
        # Confusion. Ou vous confondez “a” (préposition) avec “a” (avoir), ou vous devez employer “aux”. Exemple : Elle _a_ donné du travail _aux_ employés _à_ profusion.

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

TEST: Ce fâcheux, comme à son habitude, les {{à}} ennuyés à mourir.
TEST: Lui l’{{à}} pris par surprise.
TEST: elle n’y {{à}} pas droit.
TEST: il y {{à}} des pertes.
TEST: ce qui {{à}} pris tant de valeur, c’est…
TEST: Cette femme {{à}} été confondue avec une autre.
................................................................................
    tout a fait
    jusqu’ a
    pas a pas
        <<- /conf/ -2>> à                                           # Confusion : “a” est une forme conjugée de “avoir”. Pour la préposition, écrivez “à”.

    a [moi|toi|eux|elles]
    a [lui|elle|nous|vous]  <end>
        <<- /conf/ not morph(<1, ":Oo|>(?:il|elle)") and not value(<1, "|n’|m’|t’|")
        -1>> à                                                      # Confusion probable : “a” est une forme conjuguée du verbe “avoir”. Pour la préposition, écrivez “à”.

TEST: Je le donne {{a}} toi.
TEST: Personne {{a}} part Tom ne connaît son adresse
TEST: ce qu’elles feront alors {{a coup sûr}}, difficile de le devenir.
TEST: Face {{a}} ces gens, il ne pensait pas pouvoir réussir
TEST: c’est grâce {{a}} nous que vous y êtes parvenus
................................................................................
TEST: il se sentait de nouveau homme
TEST: il se sentait à nouveau homme


# nulle part
__conf_nulle_part__
    nul part
        <<- /conf/ not morph(<1, ":D.*:m") ->> nulle part           # Confusion : pour dire “en aucun lieu”, écrivez “nulle part”.

TEST: car {{nul part}} ailleurs, on n’en trouve une telle concentration


# on / ont
__conf_on_ont__
    on  @:W¬:3s
................................................................................
TEST: Une étude de 2005 publiée dans le Journal
TEST: Les cinq variantes de la couverture du magazine Wired d’avril 2016 consacrée à Silicon Valley.
TEST: c’est donc la cinquième en 50 ans


__purge_un_nombre__
    un  *NUM  @:A.*:s¬:G
        <<- ~2>> *

TEST: l’équipe veut aussi voir dans la lettre le nombre d’or, un symbole d’harmonie, ainsi qu’un 6 retourné.


## moi/toi/lui/elle/nous/vous/eux/elles seul·e·s
__purge_pronom_seul__
    [moi|toi]       [seul|seule]
................................................................................
        <<- /gn/ morph(\3, "@:[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\2)          # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p") -3>> =suggMasSing(\3)                          # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

    *WORD  le  *WORD
        <<- /gn/ morph(\2, ":D") >>>
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
            or ( morph(\3, ":[NA].*:f", ":[me]") and morph(\1, ":R", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -2>> =suggLesLa(\2)                                                                         # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", "*")
            or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -3>> =suggMasSing(\3)                                                                       # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

    <start>  le  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\2)                     # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

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

# content / contant / comptant
__conf_content_comptant__
    >avoir ?tout¿ [mon|ton|son|notre|votre|leur] ([comptant|contant])
        <<- /conf/ -1>> content                             # Confusion. Avoir (tout) son content…|https://fr.wiktionary.org/wiki/content#Nom_commun

    argent [content|contant]
        <<- /conf/ morph(<1, ":[VR]") -2>> comptant         # Confusion probable.|https://fr.wiktionary.org/wiki/argent_comptant

TEST: Elle a déjà eu tout son {{comptant}} de problèmes.
TEST: On paye toujours argent {{content}}.


# côté / coté
__conf_côté_coté__
................................................................................


!!!! Adverbes après verbe                                                                         !!

# fort
__sgpl_verbe_fort__
    forts
        <<- /sgpl/ morph(<1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q)|>(?:affirmer|trouver|croire|désirer|estime|préférer|penser|imaginer|voir|vouloir|aimer|adorer|souhaiter)/")
            and not morph(>1, ":A.*:[me]:[pi]")
        ->> fort                                                # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.

TEST: ces emmerdeurs crient bien trop {{forts}}
TEST: ces animaux paraissent forts, mais ils sont faibles.
TEST: ils sont forts, ces gars-là.
TEST: ils se croient forts.
................................................................................
TEST: les écarts ont été plus forts en une génération
TEST: Avec le même nombre de bulletins, les xénophobes apparaîtront plus forts.


# bien
__sgpl_verbe_bien__
    biens
        <<- /sgpl/ morph(<1, ":V", ":D.*:p|:A.*:p") ->> bien    # Confusion probable. Ici, “bien” est un adverbe, donc invariable.

TEST: Ils vont {{biens}}.
TEST: Elles travaillaient vraiment {{biens}}.
TEST: Il ne comprenait vraiment pas très {{biens}} ces principes de base.
TEST: Il a de grands biens.
TEST: Ce sont des biens de peu de valeur.

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


## 3sg
__conj_elle__
    elle  @:V¬:(?:3s|P|G)
        <<- /conj/ not morph(<1, ":R|>(?:et|ou)") and not (morph(\2, ":Q") and morph(<1, ":V0.*:3s"))
        -2>> =suggVerb(\2, ":3s")                               # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier.
        <<- /conj/ __also__ and morph(\2, ":3p") -1>> elles     # Accord avec “\2”.

    elle  qui  @:V¬:(?:3s|P|G)
        <<- /conj/ not morph(<1, ":R|>(?:et|ou)")
        -3>> =suggVerb(\3, ":3s")                               # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier.
        <<- /conj/ __also__ and morph(\3, ":3p") -1>> elles     # Accord avec “\3”.

TEST: Elle {{conquis}}.
TEST: Elle {{finis}}.
TEST: Elle {{pâlis}}.
TEST: {{Elles}} {{donne}} des leçons.
TEST: {{Elle}} ne nous {{croient}} jamais.
TEST: {{elle}} {{sont}} parties.
................................................................................
# on / ont
__conf_ont!6__
    ils  on
    [eux|ceux|elles|celles]  qui  on
        <<- /conf/ --1>> ont                                    # Confusion probable : “on” est un pronom personnel. Pour la conjugaison du verbe “avoir”, écrivez “on”.

    [elles|ceux-ci|ceux-là|celles-ci|celles-là]  on
        <<- /conf/ not morph(<1, ":[RV]") -2>> ont              # Confusion probable : “on” est un pronom personnel. Pour la conjugaison du verbe “avoir”, écrivez “on”.

TEST: celles-là {{on}} {{vraiment}} un problème avec la religion.
TEST: j’ai, tu as, ils ont, elles {{on}}
TEST: ces gens-là ils {{on}} {{raison}} plus souvent que la plupart des gens.
TEST: Ils soutiennent ceux qui {{on}} {{tant}} de raison d’être en colère.
TEST: Or parmi celles-ci on trouve typiquement d’un côté les structures