Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -357,45 +357,22 @@ __/typo(typo_guillemets_ouvrants_inverses2)__ ([«“])[  ]*$ @@0 <<- -1>> " »|”" # Mettez des guillemets fermants plutôt qu’ouvrants. __/typo(typo_guillemets_ouvrants_inverses3)__ \w([  ][«“])[  ]*[!?,:;.…] @@1 <<- -1>> " »|”" # Mettez des guillemets fermants plutôt qu’ouvrants. TEST: « Le grand homme{{«}} TEST: « La grande femme{{ «}} ! -TEST: Eux et leurs{{ ”}}amis” sont finis ! -TEST: Vos “amis{{“ }}et vous êtes finis ! - - -# Cohérence des guillemets -__/typo(typo_cohérence_guillemets1)__ - («)[^»“]+?(”) @@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 («). -__/typo(typo_cohérence_guillemets2)__ - (“)[^”«]+?(») @@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 (“). -__/typo(typo_cohérence_guillemets3)__ - (“)[^”’“«]+?(’)(?!\w) @@0,$ - <<- not before(r"\w$") -1>> "‘" # Guillemet ouvrant différent du guillemet fermant (’). - <<- -2>> ” # Guillemet fermant différent du guillemet ouvrant (“). -__/typo(typo_cohérence_guillemets4)__ - (‘)[^’“«]+?(”) @@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 (‘). - - -TEST: C’est {{«}}stupide{{”}}. -TEST: Quel {{“}}emmerdeur{{»}}, ce gars-là. -TEST: Tu sais, {{‘}}ton ami{{”}} est venu. -TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}. -TEST: « Je suis là. -TEST: — Oui, nous t’avons vu arriver. » -TEST: « J’en suis “malade”. » - - +TEST: Eux et leurs{{ ”}}amis{{”}} sont finis ! +TEST: Vos {{“}}amis{{“ }}et vous êtes finis ! + + + +# +# +# NOTE # Tout contrôle des espaces doit se faire avant ce point. # À partir d’ici, toute règle est susceptible de supprimer des caractères et les remplacer par des espaces ou des chaînes de longueur égale. - +# +# !!! !!! !!! Processeur: efface les ponctuations gênantes (URL, sigles, abréviations, IP, heures, etc.) @@ -563,15 +540,59 @@ __/latex(p_latex3)__ \{(?:abstract|align|cases|center|description|enumerate|equation|figure|flush(?:left|right)|gather|minipage|multline|quot(?:ation|e)|SaveVerbatim|table|tabular|thebibliography|[vV]erbatim|verse|wrapfigure)\} <<- ~>> * !! !! -!!!! Typographie, virgules, espaces insécables, unités de mesure… +!!!! Cohérence des guillemets !! !! -### Écritures épicènes (attention aux modifs: brainfuck d’intensité non négligeable) +__/typo(typo_cohérence_guillemets1)__ + («)[^»“]+?(”) @@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 («). +__/typo(typo_cohérence_guillemets2)__ + (“)[^”«]+?(») @@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 (“). +__/typo(typo_cohérence_guillemets3)__ + (“)[^”’“«]+?(’)(?!\w) @@0,$ + <<- not before(r"\w$") -1>> "‘" # Guillemet ouvrant différent du guillemet fermant (’). + <<- -2>> ” # Guillemet fermant différent du guillemet ouvrant (“). +__/typo(typo_cohérence_guillemets4)__ + (‘)[^’“«]+?(”) @@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 (‘). + +TEST: C’est {{«}}stupide{{”}}. +TEST: Quel {{“}}emmerdeur{{»}}, ce gars-là. +TEST: Tu sais, {{‘}}ton ami{{”}} est venu. +TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}. +TEST: « Je suis là. +TEST: — Oui, nous t’avons vu arriver. » +TEST: « J’en suis “malade”. » + + +__[i]/typo(typo_guillemets_ouvrants_non_fermés)__ + (“)\w[^”"»]+$ @@0 + <<- -1>> _ # Guillemets fermants introuvables dans la suite du paragraphe. +__[i]/typo(typo_guillemets_fermants_non_ouverts)__ + ^[^“„«"]+\w(”) @@$ + <<- -1>> _ # Guillemets ouvrants introuvables dans ce paragraphe. + +TEST: C’était mon affaire{{”}}. +TEST: C’est {{“}}compliqué. + + + +!! +!! +!!!! Écritures épicènes dystypographiques +!! +!! + +# (attention aux modifs: brainfuck d’intensité non négligeable) # La désambiguïsation est faite lors de la deuxième passe __[i](typo_écriture_épicène_tous_toutes)__ tous?[.(/·–—-]te[.)/·–—-]?s <<- option("typo") ->> tous et toutes|toutes et tous # Écriture épicène dystypographique et imprononçable. @@ -658,10 +679,16 @@ <<- ~>> \1-e TEST: je suis {{déconsidéré.e}} par ma hiérarchie. TEST: il faut en parler à l’{{auteur(e)}} et à son agent. + +!! +!! +!!!! Majuscules manquantes +!! +!! # Majuscules après un point __[s]/maj(majuscule_après_point)__ ({w_2})[.] ([a-zéàèî]\w*) @@0,$ <<- not re.search("(?i)^(?:etc|[A-Z]|chap|cf|fig|hab|litt|circ|coll|r[eé]f|étym|suppl|bibl|bibliogr|cit|op|vol|déc|nov|oct|janv|juil|avr|sept)$", \1) @@ -675,10 +702,16 @@ ^ *([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. + +!! +!! +!!!! Typographie, virgules, espaces insécables, unités de mesure… +!! +!! ## 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,$ @@ -692,16 +725,15 @@ 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__ , ({w_1}) -# <<- morphex(\1, ":[123][sp]", ":(?:N|E|A|W|G|M[12])") and not before(",") -# ->> =0[1:] # Un verbe ne doit pas être séparé du sujet, sauf éventuellement par une incise. (Et ce verbe n’est pas non plus un impératif.) [Sac à bugs] -__/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. + +__/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. TEST: « Ça suffit{{. » }}dit-elle. TEST: « J’en ai plus qu’assez{{, » }}dis-je. TEST: {{Julien}} donne-moi le sel. TEST: dès son premier rendez-vous au centre @@ -1080,10 +1112,11 @@ -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. + !!! !!! !!! Processeur: Dernier nettoyage avant coupure du paragraphe en phrases