aboutsummaryrefslogtreecommitdiff
path: root/tools/themes.py
blob: d516727bc0f90e7d0357c64613385336a1995dc3 (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
"""
Nine colors should be more than enough for any interface.
"""
import xml.sax

class ThemeHandler(xml.sax.ContentHandler):
    def __init__(self):
        self.background = None
        self.f_high = None
        self.f_med = None
        self.f_low = None
        self.f_inv = None
        self.b_high = None
        self.b_med = None
        self.b_low = None
        self.b_inv = None

    def parseColor(self, attrs):
        data = {k: v for k, v in attrs.items()}
        if data.get('id') and data.get('fill'):
            setattr(self, data['id'], data['fill'])

    def startElement(self, name, attrs):
        if name in ('circle', 'rect'):
            self.parseColor(attrs)


def parse_theme(path):
    theme = ThemeHandler()
    parser = xml.sax.make_parser()
    parser.setContentHandler(theme)
    with open(path, 'r') as fd:
        parser.parse(fd)
    return theme