Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -1785,10 +1785,14 @@ # mots grammaticaux __[i](d_dans)__ dans <<- not morph(word(-1), ":D.*:p|>[a-z]+ièmes ", False, False) =>> select(\0, ":R") +__[i](d_ton_son)__ + (\w+) ([ts]on) @@0,$ + <<- morph(\1, ">(?:le|ce[st]?|ton|mon|son|quel(?:que|)s?|[nv]otre|un|leur|ledit|dudit) ") =>> exclude(\2, ":D") + # Pronoms le/la/les __[i](p_astuce_je_le_la_les)__ je (l(?:e(?:ur|s|)|a)) @@$ <<- not morph(word(-1), ":1s", False, False) =>> select(\1, ":Oo") __[i](p_astuce_tu_le_la_les)__ tu (l(?:e(?:ur|s|)|a)) @@$ <<- not morph(word(-1), ":2s", False, False) =>> select(\1, ":Oo") @@ -5093,11 +5097,11 @@ __[i](p_avoir_pronom_loc_adv)__ ({avoir})-(?:je|tu|ils?|elles?|nous|vous|on) +(besoin|bon (?:dos|pied,? bon œil)|confiance|crainte|faim|forme humaine|honte|partie (?:gagnée|liée)|peur|soif|voix au chapitre) @@0,$ <<- morph(\1, ":V0a", False) ~2>> * __[i](p_avoir_tous_toutes_les)__ ({avoir}) +(tou(?:te|)s les ({w_2})) +({w_2}) @@0,w,>3:$,$ - <<- morph(\1, ":V0a", False) and morph(\3, ":B", False) and morph(\4, ":(?:Q|V1.*:Y)", False) ~2>> * + <<- morph(\1, ":V0a", False) and morph(\3, ":B", False) and morph(\4, ">besoin |:(?:Q|V1.*:Y)", False) ~2>> * # elle aussi + adj __[i](p_elle_aussi)__ (elle aussi) +({w_3}) @@0,$ <<- morph(\2, ":A:[fe]:s", False) ~1>> * @@ -5158,11 +5162,11 @@ ({w_2}) +((?:beige|blanc|bleu|brun|châtain|cyan|gris|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet) (?:clair|fluo|foncé|irisé|pâle|pastel|sombre|vif|tendre)) @@0,$ <<- morph(\1, ":[NAQ]", False) ~2>> * # locutions adjectivales, nominales & couleurs __[i](p_locutions_adj_nom_et_couleurs)__ - ({w_2}) +(bas(?: de gamme|se consommation)|bon (?:enfant|marché|teint|chic,? bon genre)|cl(?:é|ef) en mains?|dernier cri|fleur bleue|grand (?:public|luxe)|grandeur nature|haut(?: de gamme|e (?:résolution|fidélité|tension))|longue (?:distance|portée|durée)|meilleur marché|numéro (?:un|deux|trois|quatre|cinq|six|sept|huit|neuf|dix(?:-sept|-huit|-neuf)|onze|douze|treize|quatorze|quinze|seize|vingt)|plein cadre|top secret|vieux jeu|open source|Créative Commons|pair à pair|pur jus|terre à terre|bleu (?:ciel|marine|roi|saphir|turquoise)|vert (?:émeraude|olive|pomme)|rouge (?:brique|carmin|écarlate|rubis|sang)|jaune sable|blond platine|gris (?:acier|anthracite|perle|souris)|noir (?:d(?:’encre|e jais)|et blanc)) + ({w_2}) +(bas(?: de gamme|se consommation)|bon (?:enfant|marché|teint|chic,? bon genre)|cl(?:é|ef) en mains?|dernier cri|fleur bleue|grand (?:public|luxe|maximum)|grandeur nature|haut(?: de gamme|e (?:résolution|fidélité|tension))|longue (?:distance|portée|durée)|meilleur marché|numéro (?:un|deux|trois|quatre|cinq|six|sept|huit|neuf|dix(?:-sept|-huit|-neuf)|onze|douze|treize|quatorze|quinze|seize|vingt)|plein cadre|top secret|vieux jeu|open source|Créative Commons|pair à pair|pur jus|terre à terre|bleu (?:ciel|marine|roi|saphir|turquoise)|vert (?:émeraude|olive|pomme)|rouge (?:brique|carmin|écarlate|rubis|sang)|jaune sable|blond platine|gris (?:acier|anthracite|perle|souris)|noir (?:d(?:’encre|e jais)|et blanc)) @@0,$ <<- morph(\1, ":(?:N|A|Q|V0e)", False) ~2>> * # tous / tout / toute / toutes __[i](p_tout_déterminant_masculin)__ (tout) (?:le|cet?|[mts]on) @@0 <<- ~1>> * @@ -5214,10 +5218,12 @@ ## Seconde passe (il faut réorganiser tout le cycle de simplification) __[i](p_à_nos_yeux)__ (à (?:[mts]es|[nv]os|leurs) yeux) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[pi]", False) ~1>> * +__[i](p_au_pire)__ + (au pire) +({w_1}) @@0,$ <<- morph(\2, ":A", ":N:[me]:[si]") ~1>> * __[i](p_ben_voyons)__ ben voyons <<- isStart() ~>> * __[i](p_chaque_année_semaine_journée_décennie)__ (chaque (?:année|semaine|journée|décennie)) +({w_1}) @@0,$ <<- not morph(\2, ":(?:A.*:[fe]:[si]|Oo|[123][sp])", False) ~1>> * __[i](p_chaque_an_jour_mois)__ @@ -5363,10 +5369,14 @@ TEST: On aura carte blanche. TEST: La seule façon de redonner sens à des notions… TEST: Les longues tresses que j’ai pris l’habitude de porter depuis quelque temps et qu’il faut cinq heures pour parfaire. TEST: Il est pieds nus. TEST: des dossiers secrets défense +TEST: il y en a pour une demi-heure grand maximum aller et retour. +TEST: nous avions tous les deux besoin d’un peu de réconfort. +TEST: Une tierce connaissance qui est au pire triviale, mais non nulle. + # # //////////////////////////////////////// RÈGLES DE CONTRÔLE //////////////////////////////////////// # @@ -5484,10 +5494,11 @@ <<- __also__ and hasMasForm(\2) -2>> =suggMasSing(@, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- morphex(\2, ":[NAQ].*:f", ":[GWme]") and morph(\2, ":3s", False) -1>> cette|se # Accord de genre erroné : « \2 » est féminin. Ou bien vous confondez le déterminant “ce” avec le pronom “se”. <<- morphex(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(@) # Accord de nombre erroné : « \2 » devrait être au singulier. __[i]/gn(gn_mon_ton_son_accord)__ ([mts]on) +({w_2}) @@0,$ + <<- morph(\1, ":D", False) >>> <<- morphex(\2, ">[bcdfgjklmnpqrstvwxz].*:[NAQ].*:f", ":[GWme]") -1>> =\1.replace("on", "a") # Accord de genre erroné : « \2 » est féminin. <<- __also__ and hasMasForm(\2) -2>> =suggMasSing(@, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- morphex(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(@) # Accord de nombre erroné : « \2 » devrait être au singulier. __[i]/gn(gn_au_accord)__ (au) +({w_2}) @@0,$ @@ -5506,10 +5517,11 @@ TEST: {{une}} des {{chats}} TEST: {{mon}} {{chienne}} TEST: cet {{oliviers}} TEST: ce {{claviers}} TEST: cette bouffe, c’est du {{chiens}} +TEST: le ton monte. __> le # Accord de genre erroné : « \2 » est masculin. @@ -8448,11 +8460,11 @@ @@0,$ <<- \2.istitle() and morphex(\1, ":N", ":(?:A|V0e|D|R|B)") and not re.search("^([oO]céan Indien|[îÎiI]les Britanniques)", \0) -2>> =\2.lower() # S’il s’agit d’un adjectif, ne mettez pas de majuscule. <<- \2.islower() and not \2.startswith("canadienne") and ( re.search("(?i)^(?:certaine?s?|cette|ce[ts]?|[dl]es|[nv]os|quelques|plusieurs|chaque|une|aux)$", \1) or - ( re.search("(?i)^un$", \1) and not after("(?:approximatif|correct|courant|parfait|facile|aisé|impeccable|incompréhensible)") ) ) + ( re.search("(?i)^un$", \1) and not after("(?:approximatif|correct|courant|parfait|facile|aisé|impeccable|incompréhensible)") and not before(r"(?i)\bdans +")) ) -2>> =\2.capitalize() # S’il s’agit d’un gentilé, mettez une majuscule. TEST: des {{français}} sont arrivés ->> Français TEST: c’est de conception {{Allemande}} ->> allemande TEST: une référence aux {{israéliens}} @@ -8460,10 +8472,11 @@ TEST: et des {{soudanaises}}. TEST: les Îles Britanniques. TEST: Allemands contre Grecs, Grecs contre Allemands TEST: sept Français sur dix TEST: l’océan Indien +TEST: Je leur explique dans un anglais que la fatigue m’empêche de bien prononcer. __[s]/maj(maj_gentilés2)__ (?:une? |certaine?s? |cet? |[cdl]es |cette |l[ea] |quelques |plusieurs |chaque )((?:européen|parisien|lyonnais|marseillais|lillois|toulousain|nantais|strasbourgeois|montpelliérain|bordelais|bruxellois|montréalais|londonien|genévois|zurichois|bâlois|berlinois)n?e?s?) @@$ <<- -1>> =\1.capitalize() # S’il s’agit d’un gentilé, mettez une majuscule.