Grammalecte  Check-in [c93a0ed5ea]

Overview
Comment:[build][fr] colors for options (draft)
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | build
Files: files | file ages | folders
SHA3-256: c93a0ed5ea223477d3bee9893bced445992352c81731bc14083303b3fd025e01
User & Date: olr on 2018-09-21 08:21:34
Other Links: manifest | tags
Context
2018-09-21
08:22
[fr] règle: aussi +adj que >être check-in: 86b8eee060 user: olr tags: trunk, fr
08:21
[build][fr] colors for options (draft) check-in: c93a0ed5ea user: olr tags: trunk, fr, build
2018-09-20
09:56
[fr] lexicographer: fix end of lemma detection check-in: e1fceb6d54 user: olr tags: trunk, fr
Changes

Modified compile_rules.py from [1079fd02f6] to [dbd936143b].

397
398
399
400
401
402
403

404
405
406
407
408
409
410
411
412
413
414
415
416






417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433

434
435
436
437
438
439
440

def prepareOptions (lOptionLines):
    "returns a dictionary with data about options"
    sLang = ""
    sDefaultUILang = ""
    lStructOpt = []
    lOpt = []

    dOptLabel = {}
    dOptPriority = {}
    for sLine in lOptionLines:
        sLine = sLine.strip()
        if sLine.startswith("OPTGROUP/"):
            m = re.match("OPTGROUP/([a-z0-9]+):(.+)$", sLine)
            lStructOpt.append( (m.group(1), list(map(str.split, m.group(2).split(",")))) )
        elif sLine.startswith("OPTSOFTWARE:"):
            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("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)
            sLang = m.group(1)[:2]
            dOptLabel[sLang] = { "__optiontitle__": m.group(2).strip() }
        elif sLine.startswith("OPTDEFAULTUILANG:"):
            m = re.match("OPTDEFAULTUILANG: *([a-z][a-z](?:_[A-Z][A-Z]|))$", sLine)
            sDefaultUILang = m.group(1)[:2]
        elif sLine.startswith("OPTLABEL/"):
            m = re.match("OPTLABEL/([a-z0-9]+):(.+)$", sLine)
            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 ]))

    dOptions = { "lStructOpt": lStructOpt, "dOptLabel": dOptLabel, "sDefaultUILang": sDefaultUILang }
    dOptions.update({ "dOpt"+k: v  for k, v in lOpt })
    return dOptions, dOptPriority


def printBookmark (nLevel, sComment, nLine):
    "print bookmark within the rules file"







>













>
>
>
>
>
>

















>







397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448

def prepareOptions (lOptionLines):
    "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/"):
            m = re.match("OPTGROUP/([a-z0-9]+):(.+)$", sLine)
            lStructOpt.append( (m.group(1), list(map(str.split, m.group(2).split(",")))) )
        elif sLine.startswith("OPTSOFTWARE:"):
            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)
            sLang = m.group(1)[:2]
            dOptLabel[sLang] = { "__optiontitle__": m.group(2).strip() }
        elif sLine.startswith("OPTDEFAULTUILANG:"):
            m = re.match("OPTDEFAULTUILANG: *([a-z][a-z](?:_[A-Z][A-Z]|))$", sLine)
            sDefaultUILang = m.group(1)[:2]
        elif sLine.startswith("OPTLABEL/"):
            m = re.match("OPTLABEL/([a-z0-9]+):(.+)$", sLine)
            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


def printBookmark (nLevel, sComment, nLine):
    "print bookmark within the rules file"
478
479
480
481
482
483
484
485



486
487
488
489
490
491
492
                print(sLine.strip())
        elif sLine.startswith("TEST:"):
            # 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/")):



            # options
            lOpt.append(sLine)
        elif sLine.startswith("!!"):
            # bookmark
            m = re.match("!!+", sLine)
            nExMk = len(m.group(0))
            if sLine[nExMk:].strip():







|
>
>
>







486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
                print(sLine.strip())
        elif sLine.startswith("TEST:"):
            # test
            lTest.append("{:<8}".format(i) + "  " + sLine[5:].strip())
        elif sLine.startswith("TODO:"):
            # todo
            pass
        elif sLine.startswith(("OPTGROUP/", "OPTSOFTWARE:", "OPT/", \
                                "OPTCOLORSOFTWARE:", "OPTCOLOR/", \
                                "OPTLANG/", "OPTDEFAULTUILANG:", \
                                "OPTLABEL/", "OPTPRIORITY/")):
            # options
            lOpt.append(sLine)
        elif sLine.startswith("!!"):
            # bookmark
            m = re.match("!!+", sLine)
            nExMk = len(m.group(0))
            if sLine[nExMk:].strip():

Modified gc_lang/fr/rules.grx from [6e7bf6ea60] to [7cefad0dcf].

97
98
99
100
101
102
103






































104
105
106
107
108
109
110
OPT/html:           False       False       False       True        True        True
OPT/latex:          False       False       False       False       False       False

# Priority: from 0 to 9. Default priority is 4.
OPTPRIORITY/tu:     7
OPTPRIORITY/conf:   5
OPTPRIORITY/ocr:    3







































OPTDEFAULTUILANG: fr_FR

# Labels
OPTLANG/fr_FR:      Grammalecte (Français)
OPTLABEL/basic:     Typographie
OPTLABEL/typo:      Signes typographiques







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
OPT/html:           False       False       False       True        True        True
OPT/latex:          False       False       False       False       False       False

# 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)
OPTLABEL/basic:     Typographie
OPTLABEL/typo:      Signes typographiques
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014

TEST: Il est très {{cite}}.
TEST: très {{suivit}} par ce détective
TEST: il était très {{habille}}





!!
!!
!!!! Confusions spécifiques                                                                       !!
!!
!!

# a / à







<
<







5037
5038
5039
5040
5041
5042
5043


5044
5045
5046
5047
5048
5049
5050

TEST: Il est très {{cite}}.
TEST: très {{suivit}} par ce détective
TEST: il était très {{habille}}





!!
!!
!!!! Confusions spécifiques                                                                       !!
!!
!!

# a / à
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827

5828
5829
5830
5831
5832
5833
5834
    [ses|ces] [à|au-dessus|avec|au|aux|comme|envers|contre|derrière|devant|par|pour|sans|sur]  [l’|d’]
    [ses|ces] [à|au-dessus|avec|au|aux|comme|envers|contre|derrière|devant|par|pour|sans|sur]  {pronom_obj}
    [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… ».

    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.
TEST: {{ces}} comme la peste
TEST: car {{ses}} d’autre part
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.



# collet monté
__conf_collet_monté__
    ~^[cC]oll(?:e[rt]s?|ée?s?)-mont(?:er|ée?s?)$
    [collé|collés|>collée|coller|collets] [>montée|monté|montés|monter]
    collet [>montée|montés|monter]







|












>







5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
    [ses|ces] [à|au-dessus|avec|au|aux|comme|envers|contre|derrière|devant|par|pour|sans|sur]  [l’|d’]
    [ses|ces] [à|au-dessus|avec|au|aux|comme|envers|contre|derrière|devant|par|pour|sans|sur]  {pronom_obj}
    [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() 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.
TEST: {{ces}} comme la peste
TEST: car {{ses}} d’autre part
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?)$
    [collé|collés|>collée|coller|collets] [>montée|monté|montés|monter]
    collet [>montée|montés|monter]