summaryrefslogtreecommitdiff
path: root/extra/tagsections_convert.py
blob: 4dbf4554e6eac72c066730f738eb2d6723bde247 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/python

from configobj import ConfigObj
import argparse
import sys
import re


def get_leaf_value(cfg, path, fallback=''):
    if len(path) == 1:
        if isinstance(cfg, ConfigObj):
            if path[0] not in cfg.scalars:
                return fallback
            else:
                return cfg[path[0]]
        else:
            if path[0] not in cfg:
                return fallback
            else:
                return cfg[path[0]]
    else:
        if path[0] in cfg:
            scfg = cfg[path[0]]
            sp = path[1:]
            return get_leaf_value(scfg, sp, fallback)
        else:
            return None


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='update alot theme files')
    parser.add_argument('configfile', type=argparse.FileType('r'),
                        help='theme file to convert')
    parser.add_argument('-o', type=argparse.FileType('w'), dest='out',
                        help='destination', default=sys.stdout)
    args = parser.parse_args()

    cfg = ConfigObj(args.configfile)
    out = args.out
    print args

    def is_256(att):
        r = r'(g\d{1,3}(?!\d))|(#[0-9A-Fa-f]{3}(?![0-9A-Fa-f]))'
        return re.search(r, att)

    if 'tags' in cfg:
        for tag in cfg['tags'].sections:
            sec = cfg['tags'][tag]
            att = [''] * 6
            if 'fg' in sec:
                fg = sec['fg']
                if not is_256(fg):
                    att[2] = fg
                att[4] = fg
                del(sec['fg'])
            if 'bg' in sec:
                bg = sec['bg']
                if not is_256(bg):
                    att[3] = bg
                att[5] = bg
                del(sec['bg'])
            sec['normal'] = att
    cfg.write(out)