Index: gc_lang/fr/rules.grx
==================================================================
--- gc_lang/fr/rules.grx
+++ gc_lang/fr/rules.grx
@@ -542,54 +542,10 @@
TEST: __html__ des {{homme}}
TEST: __html__ des [b]{{femme}}[/b]
-
-!!
-!!
-!!!! 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”. »
-
-
-__[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
!!
@@ -1012,10 +968,66 @@
__[s]/chim(chim_molécules)__
(?:Ca(?:CO3|SO4)|CO2|(?:H2|Na2)(?:CO3|O|SO4)|[HNO]2|HNO3|Fe2O3|KMnO4|NO2|SiO2|SO[23])
<<- ->> =\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 («).
+__/typo(typo_cohérence_guillemets_chevrons_fermants)__
+ (“)[^”«]+?(») @@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à.
+
+
+__/typo(typo_cohérence_guillemets_doubles_ouvrants)__
+ (“)[^”’“«]+?(’)(?!\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_guillemets_doubles_fermants)__
+ (‘)[^’“«]+?(”) @@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: Tu sais, {{‘}}ton ami{{”}} est venu.
+TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}.
+
+
+__[i]/typo(typo_guillemets_doubles_ouvrants_non_fermés)__
+ (“)\w[^”"»]+$ @@0
+ <<- -1>> _ # Guillemets fermants introuvables dans la suite du paragraphe.
+__[i]/typo(typo_guillemets_doubles_fermants_non_ouverts)__
+ ^[^“„«"]+\w(”) @@$
+ <<- -1>> _ # Guillemets ouvrants introuvables dans ce paragraphe.
+
+TEST: C’était mon affaire{{”}}.
+TEST: C’est {{“}}compliqué.
+
+
+__[i]/typo(typo_guillemet_simple_ouvrant_non_fermé)__
+ (‘)\w\w[^’']+$ @@0
+ <<- before(r" $") or isStart() -1>> _ # Guillemet fermant introuvable dans la suite du paragraphe.
+__[i]/typo(typo_guillemet_simple_fermant_non_ouvert)__
+ ^[^‘']+\w\w(’) @@$
+ <<- after("^ ") or isEnd() -1>> _ # Guillemet ouvrant introuvable dans ce paragraphe.
+
+TEST: ce {{‘}}test ne finira jamais.
+TEST: ces actions ne représentent rien{{’}} pour moi.
+
+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)__