Index: compile_rules.py ================================================================== --- compile_rules.py +++ compile_rules.py @@ -399,10 +399,11 @@ "returns a dictionary with data about options" sLang = "" sDefaultUILang = "" lStructOpt = [] lOpt = [] + lOptColor = [] dOptLabel = {} dOptPriority = {} for sLine in lOptionLines: sLine = sLine.strip() if sLine.startswith("OPTGROUP/"): @@ -412,10 +413,16 @@ lOpt = [ [s, {}] for s in sLine[12:].strip().split() ] # don’t use tuples (s, {}), because unknown to JS elif sLine.startswith("OPT/"): m = re.match("OPT/([a-z0-9]+):(.+)$", sLine) for i, sOpt in enumerate(m.group(2).split()): lOpt[i][1][m.group(1)] = eval(sOpt) + elif sLine.startswith("OPTCOLORSOFTWARE:"): + lOptColor = [ [s, {}] for s in sLine[17:].strip().split() ] # don’t use tuples (s, {}), because unknown to JS + elif sLine.startswith("OPTCOLOR/"): + m = re.match("OPTCOLOR/([a-z0-9]+):(.+)$", sLine) + for i, sOpt in enumerate(m.group(2).split()): + lOptColor[i][1][m.group(1)] = [ int(s) for s in sOpt.split(",") ] elif sLine.startswith("OPTPRIORITY/"): m = re.match("OPTPRIORITY/([a-z0-9]+): *([0-9])$", sLine) dOptPriority[m.group(1)] = int(m.group(2)) elif sLine.startswith("OPTLANG/"): m = re.match("OPTLANG/([a-z][a-z](?:_[A-Z][A-Z]|)):(.+)$", sLine) @@ -429,10 +436,11 @@ dOptLabel[sLang][m.group(1)] = list(map(str.strip, m.group(2).split("|"))) if "|" in m.group(2) else [m.group(2).strip(), ""] else: print("# Error. Wrong option line in:\n ") print(sLine) print(" options defined for: " + ", ".join([ t[0] for t in lOpt ])) + print(lOptColor) dOptions = { "lStructOpt": lStructOpt, "dOptLabel": dOptLabel, "sDefaultUILang": sDefaultUILang } dOptions.update({ "dOpt"+k: v for k, v in lOpt }) return dOptions, dOptPriority @@ -480,11 +488,14 @@ # test lTest.append("{:<8}".format(i) + " " + sLine[5:].strip()) elif sLine.startswith("TODO:"): # todo pass - elif sLine.startswith(("OPTGROUP/", "OPTSOFTWARE:", "OPT/", "OPTLANG/", "OPTDEFAULTUILANG:", "OPTLABEL/", "OPTPRIORITY/")): + elif sLine.startswith(("OPTGROUP/", "OPTSOFTWARE:", "OPT/", \ + "OPTCOLORSOFTWARE:", "OPTCOLOR/", \ + "OPTLANG/", "OPTDEFAULTUILANG:", \ + "OPTLABEL/", "OPTPRIORITY/")): # options lOpt.append(sLine) elif sLine.startswith("!!"): # bookmark m = re.match("!!+", sLine) Index: gc_lang/fr/rules.grx ================================================================== --- gc_lang/fr/rules.grx +++ gc_lang/fr/rules.grx @@ -99,10 +99,48 @@ # Priority: from 0 to 9. Default priority is 4. OPTPRIORITY/tu: 7 OPTPRIORITY/conf: 5 OPTPRIORITY/ocr: 3 + +# COLORS are must be described with the HSL format (0-360, 0-100 %, 0-100 %) [don’t write the sign %] +OPTCOLORSOFTWARE: Python Server Writer JavaScript Firefox Thunderbird +OPTCOLOR/typo: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/apos: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/esp: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/tab: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/nbsp: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/tu: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/maj: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/num: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/virg: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/unit: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/nf: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/liga: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/mapos: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/chim: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/ocr: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/conf: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/sgpl: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/gn: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/infi: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/conj: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/ppas: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/imp: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/inte: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/vmode: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/bs: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/pleo: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/redon1: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/redon2: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/neg: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/date: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/mc: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/idrule: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/html: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 +OPTCOLOR/latex: 0,50,50 0,50,50 240,90,50 0,50,50 0,50,50 0,50,50 + OPTDEFAULTUILANG: fr_FR # Labels OPTLANG/fr_FR: Grammalecte (Français) @@ -5001,12 +5039,10 @@ TEST: très {{suivit}} par ce détective TEST: il était très {{habille}} - - !! !! !!!! Confusions spécifiques !! !! !! @@ -5810,11 +5846,11 @@ [ses|ces] @:D [ses|ces] [que|qu’] [ses|ces] [l’|d’] [ses|ces] {pronom_obj} [ses|ces] @:[WX]¬:N:.*:[pi] @:[RD]|>pire/ - <<- /conf/ not \1.isupper() -1>> c’est # Confusion probable. Écrivez « c’est » pour dire « ceci est… ». + <<- /conf/ not \1.isupper() and \2 != "quelques" -1>> c’est # Confusion probable. Écrivez « c’est » pour dire « ceci est… ». c’ est @:N.*:p¬:(?:G|W|M|A.*:[si]) <<- /conf/ -1:2>> ces|ses # Confusion. Exemples : c’est facile ; ces chats (désignation) ; ses chats (possession)… TEST: {{ses}} au-dessus de ses forces. @@ -5823,10 +5859,11 @@ TEST: {{ces}} qu’il y a tant de pertes TEST: {{ces}} jamais une bonne idée. TEST: {{c’est}} {{délires}} nous ennuient TEST: En 2015, c’est Paris et son agglomération qui… TEST: Ses pas de danse. +TEST: Avec ces quelques mots, que veux-tu dire ? # collet monté __conf_collet_monté__ ~^[cC]oll(?:e[rt]s?|ée?s?)-mont(?:er|ée?s?)$