#!/usr/bin/python # Copyright 2016 The ANGLE Project Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # # angle_format.py: # Utils for ANGLE formats. import json import os def reject_duplicate_keys(pairs): found_keys = {} for key, value in pairs: if key in found_keys: raise ValueError("duplicate key: %r" % (key,)) else: found_keys[key] = value return found_keys def load_json(path): with open(path) as map_file: file_data = map_file.read() map_file.close() return json.loads(file_data, object_pairs_hook=reject_duplicate_keys) def load_forward_table(path): pairs = load_json(path) reject_duplicate_keys(pairs) return { gl: angle for gl, angle in pairs } def load_inverse_table(path): pairs = load_json(path) reject_duplicate_keys(pairs) return { angle: gl for gl, angle in pairs } def load_with_override(override_path): map_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'angle_format_map.json') results = load_forward_table(map_path) overrides = load_json(override_path) for k, v in overrides.iteritems(): results[k] = v return results