File: proto_generator.py

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (96 lines) | stat: -rw-r--r-- 3,185 bytes parent folder | download | duplicates (6)
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from style_variable_generator.base_generator import Color, BaseGenerator
from style_variable_generator.model import Modes, VariableType


class BaseProtoStyleGenerator(BaseGenerator):
    '''Base Generator for Protobuf formats'''

    def GetParameters(self):
        return {
            'fields': self._CreateFieldList(),
        }

    def GetFilters(self):
        return {
            'proto_color': self._ProtoColor,
        }

    def GetGlobals(self):
        return {
            'Modes': Modes,
            'in_files': sorted(self.in_file_to_context.keys()),
        }

    def _CreateFieldList(self):
        field_value_map = dict()
        field_id_map = dict()
        field_list = []
        PROTO_CTX_KEY = ProtoStyleGenerator.GetName()
        for ctx in self.in_file_to_context.values():
            if PROTO_CTX_KEY not in ctx:
                continue
            proto_ctx = ctx[PROTO_CTX_KEY]
            field_name = proto_ctx['field_name']
            field_id = proto_ctx['field_id']
            if field_name in field_id_map and field_id_map.get(
                    field_name) != field_id:
                raise Exception(
                    'Proto field "%s" declared > 1 times with differing ids' %
                    field_name)
            field_id_map[field_name] = field_id
            field = {'name': field_name, 'id': field_id, 'values': []}
            if field_name not in field_value_map:
                field_list.append(field)
                field_value_map[field_name] = field['values']

        # Order fields by key
        field_list.sort(key=lambda x: x['id'])

        # Populate each field with its corresponding colors.
        color_model = self.model.colors
        for name, mode_values in color_model.items():
            color_item = {
                'name': name,
                'mode_values': {
                    Modes.LIGHT: color_model.ResolveToRGBA(name, Modes.LIGHT),
                    Modes.DARK: color_model.ResolveToRGBA(name, Modes.DARK),
                }
            }
            field_value_map[
                self.model.variable_map[name].context[PROTO_CTX_KEY]
                ['field_name']].append(color_item)

        return field_list

    def _ProtoColor(self, c):
        '''Returns the proto color representation of |c|'''
        assert (isinstance(c, Color))

        def AlphaToInt(alpha):
            return int(alpha * 255)

        return '0x%X%02X%02X%02X' % (AlphaToInt(c.opacity.a), c.r, c.g, c.b)


class ProtoStyleGenerator(BaseProtoStyleGenerator):
    @staticmethod
    def GetName():
        return 'proto'

    def Render(self):
        return self.ApplyTemplate(self, 'templates/proto_generator.tmpl',
                                  self.GetParameters())


class ProtoJSONStyleGenerator(BaseProtoStyleGenerator):
    @staticmethod
    def GetName():
        return 'protojson'

    def Render(self):
        return self.ApplyTemplate(self, 'templates/proto_json_generator.tmpl',
                                  self.GetParameters())