Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -667,15 +667,15 @@ TEST: {{je}} suis disponible quand tu veux. Mais pas aujourd’hui. !! !! -!!!! Typographie, virgules, espaces insécables, unités de mesure… +!!!! Virgules !! !! -## virgules manquantes +# virgules manquantes __[i>/virg(virgule_manquante_avant_etc)__ {w_1}( etc[.]) @@$ <<- -1>> , etc. # Avant « etc. », il faut mettre une virgule. __[i>/virg(virgule_manquante_avant_car)__ ({w_1})( car)(?= (?:j[e’]|tu|ils?|nous|vous|elles?|on|les?|la|ces?|des?|cette|[mts](?:on|a))\b) @@0,$ <<- not morph(\1, ":[DR]", False) -2>> , car # Si « car » est la conjonction de coordination, une virgule est peut-être souhaitable.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3447 @@ -687,11 +687,10 @@ TEST: Un chien, un chat{{ etc.}} ->> , etc. TEST: Je suis fatigué{{ car}} ils ont joué toute la nuit. ->> , car TEST: Je suis fatigué{{ mais}} il a joué toute la nuit. ->> , mais - __/virg(virgule_point_fin_dialogue)__ ([.] » )[a-zéà] @@0 <<- -1>> " », | » " # Ou il faut une virgule (exemple : « Je viens », dit-il). Ou le point est superflu. Ou il faut une majuscule sur le mot suivant. __/virg(virgule_fin_dialogue)__ (, »,? )[a-zéà] @@0 <<- -1>> " », | » " # Virgule mal placée ou superflue. @@ -699,18 +698,35 @@ TEST: « J’en ai plus qu’assez{{, » }}dis-je. TEST: {{Julien}} donne-moi le sel. TEST: dès son premier rendez-vous au centre TEST: Depuis combien de temps fumez-vous ? + +__/virg(virg_virgule_avant_points_suspension)__ + , *… <<- ->> … # Typographie : pas de virgule avant les points de suspension. + +__/virg(virg_virgule_après_point)__ + ({w1})([.],) @@0,$ + <<- not re.search("^(?:etc|[A-Z]|fig|hab|litt|circ|coll|ref|étym|suppl|bibl|bibliogr|cit|vol|déc|nov|oct|janv|juil|avr|sept|pp?)$", \1) + -2>> ,|. # Pas de virgule après un point (sauf éventuellement après une abréviation). + +TEST: ceci, cela{{, …}} ->> … +TEST: Les chiens, les chats{{.,}} les poules. ->> ,|. + # Fin de paragraphe #__/typo__ ({w_2}) *$ @@0 # <<- before("[a-zéàùèê][.] ") and not before(r"^(?:\d|\w[.])") # -1>> \1.|\1…|\1 !|\1 ?|\1 :|\1 ;|\1, # Il manque une ponctuation finale. -# Espaces manquants +!! +!! +!!!! Espaces manquants +!! +!! + __/typo(typo_espace_manquant_après1)__ ({w1})[,:]({w_1}) @@0,$ <<- not \1.isdigit() -2>> " \2" # Il manque un espace. __/typo(typo_espace_manquant_après2)__ [?!;%‰‱˚»}]({w_1}) @@$ <<- -1>> " \1" # Il manque un espace. __> " Manquant" TEST: qui ont refuse.{{de}} se sauver ->> " de" +!! +!! +!!!! Points +!! +!! # Points superflus __[i>/typo(typo_et_cetera)__ etc(?:[.]{3,5}|…) <<- ->> etc. # Un seul point après « etc. » TEST: {{etc…}} @@ -761,19 +782,16 @@ TEST: Ligne de points…{{...........................}} TEST: Ligne de points{{...........................}} TEST: Aujourd’hui, M. Camus va nous lire son texte. -__/typo(typo_virgule_avant_points_suspension)__ , *… <<- ->> … # Typographie : pas de virgule avant les points de suspension. -__/typo(typo_virgule_après_point)__ - ({w1})([.],) @@0,$ - <<- not re.search("^(?:etc|[A-Z]|fig|hab|litt|circ|coll|ref|étym|suppl|bibl|bibliogr|cit|vol|déc|nov|oct|janv|juil|avr|sept|pp?)$", \1) - -2>> ,|. # Pas de virgule après un point (sauf éventuellement après une abréviation). - -TEST: ceci, cela{{, …}} ->> … -TEST: Les chiens, les chats{{.,}} les poules. ->> ,|. - + +!! +!! +!!!! Tirets +!! +!! # Tirets, énumérations et dialogues __/typo(typo_tiret_début_ligne)__ ^[-_][  ] <<- ->> "— |– " # Dialogues et énumérations : un tiret cadratin ou demi-cadratin, suivi d’un espace insécable, est requis. __/typo(typo_tiret_dans_dialogue)__ ^ *«[  ](-[  ]) @@$ <<- -1>> "— |– " # Dialogues : un tiret cadratin ou demi-cadratin, suivi d’un espace insécable, est requis. (Attention : à moins qu’il s’agisse d’un dialogue inclus dans un autre dialogue, cette manière d’écrire est erronée.) @@ -788,11 +806,15 @@ TEST: {{—}}Viens là. ->> "— |– " TEST: Cette phrase contient{{ - }}c’est certain – des tirets d’incise. ->> " – | — " TEST: « {{- }}Viens ! On va en finir avec cette affaire, sale fils de pute. ->> "— |– " -# Ponctuations redondantes +!! +!! +!!!! Ponctuations redondantes +!! +!! __/typo(typo_ponctuation_superflue1)__ , ?([.,;:!?]) @@$ <<- ->> =",|" + \1 # Une de ces ponctuations est superflue. __/typo(typo_ponctuation_superflue2)__ ; ?([.,;:…!?]) @@$ <<- ->> =";|" + \1 # Une de ces ponctuations est superflue. __/typo(typo_ponctuation_superflue3)__ :[.,;:…!?] <<- ->> =":|" + \0[1] # Une de ces ponctuations est superflue. TEST: Mouais{{, ;}} @@ -823,11 +845,16 @@ TEST: Succession : a{{;}} b. ->> " ;" TEST: C’est assez {{: }}parlez ! ->> ": " TEST: {{» }}C’est ce qu’on croit savoir. ->> "» |« " -# Signes typographiques. +!! +!! +!!!! Signes typographiques +!! +!! + __/typo(typo_signe_multiplication)__ (\d+) ?[x*] ?(\d+) @@0,$ <<- not \0.startswith("0x") ->> \1 × \2 # Signe de multiplication typographique. TEST: {{800 x 600}} ->> 800 × 600 TEST: {{800*600}} ->> 800 × 600 @@ -847,12 +874,15 @@ TEST: __liga__ un {{fl}}ottement ->> fl TEST: __liga__ une belle {{fi}}gure ->> fi +!! +!! !!!! Apostrophes - +!! +!! ## Apostrophe typographique __[i>/apos(apostrophe_typographique)__ ([ldsncjmç]|jusqu|lorsqu|aujourd|presqu|quelqu|puisqu|qu|prud|entr)['´‘′`](?=[\w"«]) @@0 <<- ->> \1’ # Apostrophe typographique. __[i>/apos(apostrophe_typographique_après_t)__ t['´‘′`](?!ils?|elles?|on)(?=[\w"«]) <<- ->> t’ # Apostrophe typographique. @@ -898,11 +928,15 @@ TEST: Il {{s }}était dit qu’il ne le ferait pas. ->> s’ TEST: Je {{m }}étais imaginé que je pourrais pas retrouver cet objet. ->> m’ TEST: Je {{n }}ai pas retrouvé l’ambiance de mes années de lycée. ->> n’ +!! +!! !!!! Guillemets typographiques +!! +!! __/typo(typo_guillemets_typographiques_doubles_ouvrants)__ "(?=\w) <<- not before(r"[a-zA-Zéïîùàâäôö]$") ->> « |“ # Guillemets typographiques ouvrants. __/typo(typo_guillemets_typographiques_doubles_fermants)__ @@ -936,13 +970,15 @@ TEST: Le {{'}}grand’ homme. ->> “|‘|‹ TEST: Le ‘grand{{'}} homme. ->> ”|’|› TEST: J’en ai '''marre''' (syntaxe wiki). - - +!! +!! !!!! Élisions +!! +!! __[i]/typo(typo_élision_déterminants)__ (l[ea] |de )([aâeéêiîoôu]\w+) @@0,$ <<- not re.search("(?i)^(?:onz[ei]|énième|iourte|ouistiti|ouate|one-?step|ouf|Ouagadougou|I(?:I|V|X|er|ᵉʳ|ʳᵉ|è?re))", \2) and not \2.isupper() and not morph(\2, ":G", False) -1>> =\1[0]+"’" # Élision de l’article devant un mot commençant par une voyelle.|http://fr.wikipedia.org/wiki/Élision @@ -986,11 +1022,15 @@ -1>> cet # Euphonie : « ce » devient « cet » devant un mot commençant par une voyelle. TEST: {{ce}} animal est dangereux +!! +!! !!!! Divers +!! +!! ## NF (memo: don’t use flag i) __[s]/nf(nf_norme_française)__ [nN][fF][  -]?(?:c|C|e|E|p|P|q|Q|s|S|x|X|z|Z|[eE][nN](?:[  -][iI][sS][oO]|))[  -]?[0-9]+(?:[/ ‑-][0-9]+|) <<- not re.search("^NF (?:C|E|P|Q|S|X|Z|EN(?: ISO|)) [0-9]+(?:‑[0-9]+|)", \0) @@ -1005,12 +1045,15 @@ <<- ->> =\0.replace("2", "₂").replace("3", "₃").replace("4", "₄") # Typographie des composés chimiques. [!] TEST: __chim__ les molécules {{CaCO3}} et {{H2O}}… - +!! +!! !!!! Cohérence des guillemets +!! +!! __/typo(typo_cohérence_guillemets_chevrons_ouvrants)__ («)[^»“]+?(”) @@0,$ <<- not before(r"\w$") -1>> “ # Guillemet ouvrant différent du guillemet fermant (”). <<- not after(r"^\w") -2>> " »" # Guillemet fermant différent du guillemet ouvrant («). @@ -1060,12 +1103,15 @@ TEST: « Je suis là. TEST: — Oui, nous t’avons vu arriver. » TEST: « J’en suis “malade”. » - +!! +!! !!!! 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|°C|℃)(?![’']) @@0,0 <<- -1>> "\2 " # Avec une unité de mesure, mettez un espace insécable. @@ -1095,11 +1141,15 @@ TEST: 1998 s’annonce grandiose. TEST: il y en a 3,43 milliards. TEST: je veux 200 euros. +!! +!! !!!! Grands nombres +!! +!! __[s]/num(num_grand_nombre_soudé)__ \d\d\d\d+ <<- not before("NF[  -]?(C|E|P|Q|X|Z|EN(?:[  -]ISO|)) *$") >>> <<- \0.__len__() > 4 ->> =formatNumber(\0) # Formatage des grands nombres. @@ -1140,13 +1190,15 @@ <<- ~>> =\0.replace(" ", "_") TEST: Il a perdu {{20 000}} euros à la Bourse en un seul mois. - +!! +!! !!!! Dates - +!! +!! __[i]/date(date_nombres)__ (?> _ # Cette date est invalide. <<- ~>> =\0.replace(".", "-").replace(" ", "-").replace("\/", "-") @@ -1155,20 +1207,24 @@ TEST: le {{32.03.2018}} TEST: le {{81/01/2012}} TEST: 12-12-2012 +!! +!! !!!! Redondances - +!! +!! __[i]/redon1(redondances_paragraphe)__ ({w_4})[  ,.;!?:].*[  ](\1) @@0,$ <<- not morph(\1, ":(?:G|V0)|>(?:t(?:antôt|emps|rès)|loin|souvent|parfois|quelquefois|côte|petit|même) ", False) and not \1[0].isupper() -2>> _ # Dans ce paragraphe, répétition de « \1 » (à gauche). <<- __also__ -1>> _ # Dans ce paragraphe, répétition de « \1 » (à droite). TEST: __redon1__ Tu es son {{avenir}}. Et lui aussi est ton {{avenir}}. TEST: __redon1__ Car parfois il y en a. Mais parfois il n’y en a pas. + !!! !!!