You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
# Copyright 2013 Google, Inc. All Rights Reserved.
 | 
						|
#
 | 
						|
# Google Author(s): Behdad Esfahbod, Roozbeh Pournader
 | 
						|
 | 
						|
 | 
						|
class Options(object):
 | 
						|
    class UnknownOptionError(Exception):
 | 
						|
        pass
 | 
						|
 | 
						|
    def __init__(self, **kwargs):
 | 
						|
        self.verbose = False
 | 
						|
        self.timing = False
 | 
						|
        self.drop_tables = []
 | 
						|
        self.input_file = None
 | 
						|
        self.output_file = "merged.ttf"
 | 
						|
        self.import_file = None
 | 
						|
 | 
						|
        self.set(**kwargs)
 | 
						|
 | 
						|
    def set(self, **kwargs):
 | 
						|
        for k, v in kwargs.items():
 | 
						|
            if not hasattr(self, k):
 | 
						|
                raise self.UnknownOptionError("Unknown option '%s'" % k)
 | 
						|
            setattr(self, k, v)
 | 
						|
 | 
						|
    def parse_opts(self, argv, ignore_unknown=[]):
 | 
						|
        ret = []
 | 
						|
        opts = {}
 | 
						|
        for a in argv:
 | 
						|
            orig_a = a
 | 
						|
            if not a.startswith("--"):
 | 
						|
                ret.append(a)
 | 
						|
                continue
 | 
						|
            a = a[2:]
 | 
						|
            i = a.find("=")
 | 
						|
            op = "="
 | 
						|
            if i == -1:
 | 
						|
                if a.startswith("no-"):
 | 
						|
                    k = a[3:]
 | 
						|
                    v = False
 | 
						|
                else:
 | 
						|
                    k = a
 | 
						|
                    v = True
 | 
						|
            else:
 | 
						|
                k = a[:i]
 | 
						|
                if k[-1] in "-+":
 | 
						|
                    op = k[-1] + "="  # Ops is '-=' or '+=' now.
 | 
						|
                    k = k[:-1]
 | 
						|
                v = a[i + 1 :]
 | 
						|
            ok = k
 | 
						|
            k = k.replace("-", "_")
 | 
						|
            if not hasattr(self, k):
 | 
						|
                if ignore_unknown is True or ok in ignore_unknown:
 | 
						|
                    ret.append(orig_a)
 | 
						|
                    continue
 | 
						|
                else:
 | 
						|
                    raise self.UnknownOptionError("Unknown option '%s'" % a)
 | 
						|
 | 
						|
            ov = getattr(self, k)
 | 
						|
            if isinstance(ov, bool):
 | 
						|
                v = bool(v)
 | 
						|
            elif isinstance(ov, int):
 | 
						|
                v = int(v)
 | 
						|
            elif isinstance(ov, list):
 | 
						|
                vv = v.split(",")
 | 
						|
                if vv == [""]:
 | 
						|
                    vv = []
 | 
						|
                vv = [int(x, 0) if len(x) and x[0] in "0123456789" else x for x in vv]
 | 
						|
                if op == "=":
 | 
						|
                    v = vv
 | 
						|
                elif op == "+=":
 | 
						|
                    v = ov
 | 
						|
                    v.extend(vv)
 | 
						|
                elif op == "-=":
 | 
						|
                    v = ov
 | 
						|
                    for x in vv:
 | 
						|
                        if x in v:
 | 
						|
                            v.remove(x)
 | 
						|
                else:
 | 
						|
                    assert 0
 | 
						|
 | 
						|
            opts[k] = v
 | 
						|
        self.set(**opts)
 | 
						|
 | 
						|
        return ret
 |