Index: compile_rules.py ================================================================== --- compile_rules.py +++ compile_rules.py @@ -549,10 +549,14 @@ print(" options defined for: " + ", ".join([ t[0] for t in lOpt ])) dOptions = { "lStructOpt": lStructOpt, "dOptLabel": dOptLabel } dOptions.update({ "dOpt"+k: v for k, v in lOpt }) return dOptions, dOptPriority + +def printBookmark (nLevel, sComment, nLine): + print(" {:>6}: {}".format(nLine, " " * nLevel + sComment)) + def make (lRules, sLang, bJavaScript): "compile rules, returns a dictionary of values" # for clarity purpose, don’t create any file here @@ -561,12 +565,14 @@ global dDEF lLine = [] lRuleLine = [] lTest = [] lOpt = [] + printBookmark(0, "PASS 0: PARAGRAPH BY PARAGRAPH", 0) for i, sLine in enumerate(lRules, 1): if sLine.startswith('#END'): + printBookmark(0, "BREAK BY #END", i) break elif sLine.startswith("#"): pass elif sLine.startswith("DEF:"): m = re.match("DEF: +([a-zA-Z_][a-zA-Z_0-9]*) +(.+)$", sLine.strip()) @@ -581,10 +587,16 @@ pass 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, "[++]"]) 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 @@ -261,10 +261,15 @@ # # //////////////////////////////////////// CONTRÔLE DES ESPACES //////////////////////////////////////// # +!! +!! +!! 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. @@ -375,14 +380,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. -# -# //////////////////////////////////////// PRÉPROCESSEUR //////////////////////////////////////// -# - +!! +!! +!! Processeur: efface les ponctuations gênantes (URL, sigles, abréviations, IP, heures, etc.) +!! +!! # e-mail __(p_email)__ \w[\w.-]*@\w[\w.-]*\w[.]\w+ <<- ~>> * @@ -502,10 +508,16 @@ TEST: Marion Maréchal-Le Pen. Afin que Maréchal ne soit pas analysé comme un impératif, “Le Pen” devient “Le_Pen”. TEST: Car [je] deviendrai plus insaisissable que jamais. #TEST: des {{homme}} #TEST: des [b]{{femme}}[/b] + +!! +!! +!! Processeur: balises HTML et LaTeX +!! +!! # HTML __/html(p_html_amp_xxx)__ &[a-zA-Z]+; <<- ~>> _ __/html(p_html_lt)__ < <<- ~>> " <" __/html(p_html_gt)__ > <<- ~>> > @@ -521,17 +533,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)\} <<- ~>> * -# -# //////////////////////////////////////// RÈGLES DE CONTRÔLE //////////////////////////////////////// -# - - -############################## TYPOGRAPHIE ############################## - +!! +!! +!! 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)__ @@ -905,13 +915,14 @@ <<- ->> =\0.replace("2", "₂").replace("3", "₃").replace("4", "₄") # Typographie des composés chimiques. [!] TEST: __chim__ les molécules {{CaCO3}} et {{H2O}}… -# -# 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. @@ -941,13 +952,14 @@ TEST: Il a perdu {{20 000}} euros à la Bourse en un seul mois. -# -# DATES ------------------------------------------------------------------------------------------ -# +!! +!! Contrôle: dates +!! + __[i]/date(date_nombres)__ (?> _ # Cette date est invalide. <<- ~>> =\0.replace(".", "-").replace(" ", "-").replace("\/", "-") @@ -956,13 +968,13 @@ TEST: le {{32.03.2018}} TEST: le {{81/01/2012}} TEST: 12-12-2012 -# -# REDONDANCES (dans le paragraphe) --------------------------------------------------------------- -# +!! +!! 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). @@ -971,15 +983,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. - -# -# //////////////////////////////////////// PRÉ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("‑", "") @@ -991,54 +1001,51 @@ TEST: “C’est bon !”, croit savoir Marie. TEST: “Parce que… ?” finit par demander Paul. TEST: « Dans quel pays sommes-nous ? » demanda un manifestant. - -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# //////////////////////////////////////// PASSE 1 //////////////////////////////////////// -# phrase par phrase -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -[++] +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +[++] PASSE 1: phrase par phrase +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! +!! # # DOUBLONS (casse identique) ---------------------------------------------------------------------