Grammalecte  Check-in [c93a0ed5ea]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

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 2018-09-21 08:21:34
Context
2018-09-21
08:22
[fr] règle: aussi +adj que >être check-in: 86b8eee060 user: olr tags: fr, trunk
08:21
[build][fr] colors for options (draft) check-in: c93a0ed5ea user: olr tags: build, fr, trunk
2018-09-20
09:56
[fr] lexicographer: fix end of lemma detection check-in: e1fceb6d54 user: olr tags: fr, trunk
Changes

Changes to compile_rules.py.

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
...
427
428
429
430
431
432
433

434
435
436
437
438
439
440
...
478
479
480
481
482
483
484
485



486
487
488
489
490
491
492

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("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"
................................................................................
                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():







>













>
>
>
>
>
>







 







>







 







|
>
>
>







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
...
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
...
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503

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("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"
................................................................................
                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():

Changes to gc_lang/fr/rules.grx.

97
98
99
100
101
102
103






































104
105
106
107
108
109
110
....
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
....
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
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
................................................................................

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





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

# a / à
................................................................................
    [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]







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







 







<
<







 







|












>







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
....
5037
5038
5039
5040
5041
5042
5043


5044
5045
5046
5047
5048
5049
5050
....
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
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
................................................................................

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





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

# a / à
................................................................................
    [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]