Index: compile_rules.py ================================================================== --- compile_rules.py +++ compile_rules.py @@ -565,11 +565,12 @@ global dDEF lLine = [] lRuleLine = [] lTest = [] lOpt = [] - printBookmark(0, "PASS 0: PARAGRAPH BY PARAGRAPH", 0) + zBookmark = re.compile("^!!+") + for i, sLine in enumerate(lRules, 1): if sLine.startswith('#END'): printBookmark(0, "BREAK BY #END", i) break elif sLine.startswith("#"): @@ -588,15 +589,14 @@ elif sLine.startswith(("OPTGROUP/", "OPTSOFTWARE:", "OPT/", "OPTLANG/", "OPTLABEL/", "OPTPRIORITY/")): lOpt.append(sLine) elif re.match("[  \t]*$", sLine): pass elif sLine.startswith("!!"): - if sLine[2:].strip(): - printBookmark(1, sLine[2:].strip(), i) - elif sLine.startswith("[++]"): - printBookmark(0, "PASS 1: SENTENCE BY SENTENCE", i) - lRuleLine.append([i, "[++]"]) + m = zBookmark.search(sLine) + nExMk = len(m.group(0)) + if sLine[nExMk:].strip(): + printBookmark(nExMk-2, sLine[nExMk:].strip(), i) elif sLine.startswith((" ", "\t")): lRuleLine[len(lRuleLine)-1][1] += " " + sLine.strip() else: lRuleLine.append([i, sLine.strip()]) Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -212,64 +212,59 @@ DEF: w4 \w\w\w\w+ -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# //////////////////////////////////////// PASSE 0 //////////////////////////////////////// -# paragraphe par paragraphe -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# - - - -# -# //////////////////////////////////////// CONTRÔLE DES ESPACES //////////////////////////////////////// -# - -!! -!! -!! Contrôle: espaces & tabulations -!! -!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! PASSE 1: PARAGRAPHE PAR PARAGRAPHE +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! + + + +!!! +!!! +!!! Contrôle: espaces & tabulations +!!! +!!! # Espaces surnuméraires # Note : les tabulations ne sont pas soulignées dans LibreOffice. Mais l’erreur est bien présente. __/tab(tab_début_ligne)__ ^[    ]+ <<- ->> "" # Espace(s) en début de ligne à supprimer : utilisez les retraits de paragraphe. __/tab(tab_fin_ligne)__ [    ]+$ <<- ->> "" # Espace(s) en fin de ligne à supprimer. @@ -380,15 +375,15 @@ # 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.) -!! -!! +!!! +!!! +!!! Processeur: efface les ponctuations gênantes (URL, sigles, abréviations, IP, heures, etc.) +!!! +!!! # e-mail __(p_email)__ \w[\w.-]*@\w[\w.-]*\w[.]\w+ <<- ~>> * @@ -509,15 +504,15 @@ TEST: Car [je] deviendrai plus insaisissable que jamais. #TEST: des {{homme}} #TEST: des [b]{{femme}}[/b] -!! -!! -!! Processeur: balises HTML et LaTeX -!! -!! +!!! +!!! +!!! Processeur: balises HTML et LaTeX +!!! +!!! # HTML __/html(p_html_amp_xxx)__ &[a-zA-Z]+; <<- ~>> _ __/html(p_html_lt)__ < <<- ~>> " <" __/html(p_html_gt)__ > <<- ~>> > @@ -533,15 +528,15 @@ __/latex(p_latex2)__ \\[,;/\\] <<- ~>> * __/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)\} <<- ~>> * -!! -!! -!! Contrôle: typographie, virgules, espaces insécables, unités de mesure… -!! -!! +!!! +!!! +!!! Contrôle: typographie, virgules, espaces insécables, unités de mesure… +!!! +!!! ### Écritures épicènes invariables # Attention, lors de la deuxième passe, on se sert du désambiguïsateur __[u](typo_écriture_épicène_pluriel)__ @@ -916,13 +911,13 @@ TEST: __chim__ les molécules {{CaCO3}} et {{H2O}}… -!! -!! Contrôle: grands nombres -!! +!!! +!!! Contrôle: grands nombres +!!! __[s]/num(num_grand_nombre_soudé)__ \d\d\d\d\d+ <<- not before("NF[  -]?(C|E|P|Q|X|Z|EN(?:[  -]ISO|)) *") ->> =formatNumber(\0) # Formatage des grands nombres. @@ -952,13 +947,13 @@ TEST: Il a perdu {{20 000}} euros à la Bourse en un seul mois. -!! -!! Contrôle: dates -!! +!!! +!!! Contrôle: dates +!!! __[i]/date(date_nombres)__ (?> _ # Cette date est invalide. <<- ~>> =\0.replace(".", "-").replace(" ", "-").replace("\/", "-") @@ -968,13 +963,13 @@ TEST: le {{32.03.2018}} TEST: le {{81/01/2012}} TEST: 12-12-2012 -!! -!! Contrôle: redondances -!! +!!! +!!! Contrôle: 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). @@ -983,13 +978,13 @@ 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 -!! +!!! +!!! Processeur: Dernier nettoyage avant coupure du paragraphe en phrases +!!! # Trait d’union conditionnel (u00AD) __(p_trait_union_conditionnel1)__ \w+‑\w+‑\w+ <<- ~>> =\0.replace("‑", "") __(p_trait_union_conditionnel2)__ \w+‑\w+ <<- ~>> =\0.replace("‑", "") @@ -1021,11 +1016,11 @@ !! !! !! !! !! -[++] PASSE 1: phrase par phrase +!! PASSE 1: PHRASE PAR PHRASE !! !! !! !! !! @@ -1043,10 +1038,11 @@ !! !! !! !! +[++] # # DOUBLONS (casse identique) --------------------------------------------------------------------- #