# -*- coding: UTF-8 -*- """ name_list: ["*id", "price", ...] type_list: ["int", "string", "reward", ...] type_mapping: {"reward": ["type:int", "id:int", "num:int"], ...} export_color: [(r, g, b), (r, g, b), ...] lang_color: [(r, g, b), (r, g, b), ...] return: ["*id#r:int", "price#s:string", ...] """ def type_change(name_list, type_list, type_mapping, export_color, lang_color): length = len(name_list) new_type = [] for i in range(length): required = get_required(export_color[i]) lang = get_lang(lang_color[i]) new_type.append('%s#%s' % (required, lang)) return new_type def gen_type(type_str, type_mapping): if type_str.startswith('[') and type_str.endswith(']'): return "[%s]" % gen_type(type_str[1:-1], type_mapping) elif type_str.startswith('['): raise TypeError(type_str) elif type_str in type_mapping: return "%s@{%s}" % (type_str, ','.join(type_mapping[type_str])) else: return type_str class TypeError(BaseException): def __init__(self, ss): self._ss = ss def __str__(self): return "type format error: %s" % self._ss class ColorError(BaseException): def __init__(self, rgb, usage): self._rgb = rgb self._usage = usage def __str__(self): return "unknown color(%s) for %s" % (self._rgb, self._usage) def get_required(rgb): if rgb in ((221, 8, 6), (255, 0, 0), (255, 153, 204)): return 'required' elif rgb in ((0, 100, 17), (255, 255, 255), (0, 0, 0), (0, 128, 0), (0, 128, 128), (150, 150, 150)): return 'optional' else: raise ColorError(rgb, "required") def get_lang(rgb): if rgb in ((252, 243, 5), (255, 255, 0), (255, 255, 204)): return 'both' elif rgb in ((204, 255, 204), ): return 'server' elif rgb in ((162, 189, 144), (0, 0, 212), (0, 0, 255), (204, 204, 255)): return 'client' elif rgb in ((0, 0, 0), (255, 255, 255), (150, 150, 150)): return 'none' else: raise ColorError(rgb, "language") if __name__ == '__main__': print type_change(["*id", "price", "else", "price2"], ["int", "[reward]", "[int]", "reward"], { "reward": ["id:int", "type:int"], }, [(255, 0, 0), (0, 100, 17), (221, 8, 6), (0, 0, 0)], [(252, 243, 5), (204, 255, 204), (162, 189, 144), (255, 255, 255)])