summaryrefslogtreecommitdiff
path: root/extra/tagsections_convert.py
blob: 3a73f60f2dd73de404cff0cb7aa4a06527590293 (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/usr/bin/python
"""
 CONFIG CONVERTER
 this script converts your custom tag string section from the v.3.1 syntax
 to the current format.

     >>> tagsections_convert.py -o config.new config.old

 will convert your whole alot config safely to the new format.
"""

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

            if sec.get('hidden'):
                sec['translated'] = ''
    cfg.write(out)