1# Copyright 2013 Google, Inc. All Rights Reserved. 2# 3# Google Author(s): Behdad Esfahbod, Roozbeh Pournader 4 5 6class Options(object): 7 class UnknownOptionError(Exception): 8 pass 9 10 def __init__(self, **kwargs): 11 self.verbose = False 12 self.timing = False 13 self.drop_tables = [] 14 self.input_file = None 15 self.output_file = "merged.ttf" 16 self.import_file = None 17 18 self.set(**kwargs) 19 20 def set(self, **kwargs): 21 for k, v in kwargs.items(): 22 if not hasattr(self, k): 23 raise self.UnknownOptionError("Unknown option '%s'" % k) 24 setattr(self, k, v) 25 26 def parse_opts(self, argv, ignore_unknown=[]): 27 ret = [] 28 opts = {} 29 for a in argv: 30 orig_a = a 31 if not a.startswith("--"): 32 ret.append(a) 33 continue 34 a = a[2:] 35 i = a.find("=") 36 op = "=" 37 if i == -1: 38 if a.startswith("no-"): 39 k = a[3:] 40 v = False 41 else: 42 k = a 43 v = True 44 else: 45 k = a[:i] 46 if k[-1] in "-+": 47 op = k[-1] + "=" # Ops is '-=' or '+=' now. 48 k = k[:-1] 49 v = a[i + 1 :] 50 ok = k 51 k = k.replace("-", "_") 52 if not hasattr(self, k): 53 if ignore_unknown is True or ok in ignore_unknown: 54 ret.append(orig_a) 55 continue 56 else: 57 raise self.UnknownOptionError("Unknown option '%s'" % a) 58 59 ov = getattr(self, k) 60 if isinstance(ov, bool): 61 v = bool(v) 62 elif isinstance(ov, int): 63 v = int(v) 64 elif isinstance(ov, list): 65 vv = v.split(",") 66 if vv == [""]: 67 vv = [] 68 vv = [int(x, 0) if len(x) and x[0] in "0123456789" else x for x in vv] 69 if op == "=": 70 v = vv 71 elif op == "+=": 72 v = ov 73 v.extend(vv) 74 elif op == "-=": 75 v = ov 76 for x in vv: 77 if x in v: 78 v.remove(x) 79 else: 80 assert 0 81 82 opts[k] = v 83 self.set(**opts) 84 85 return ret 86