github.com/tawesoft/golib/v2@v2.10.0/legacy/operator/template-numbers.py (about) 1 2 # usage: python3 template-numbers.py 3 4 template="" 5 template_file="template_numbers_test.go" 6 7 numbers = [ 8 # class, type signed 9 ("integers", "int", True), 10 ("integers", "int8", True), 11 ("integers", "int16", True), 12 ("integers", "int32", True), 13 ("integers", "int64", True), 14 ("integers", "uint", False), 15 ("integers", "uint8", False), 16 ("integers", "uint16", False), 17 ("integers", "uint32", False), 18 ("integers", "uint64", False), 19 ("floats", "float32", None), 20 ("floats", "float64", None), 21 ] 22 23 with open(template_file, 'r') as fp: 24 template = fp.read() 25 26 for _class, _type, signed in numbers: 27 28 def replace(s): 29 for r in (("_T", _type.title()), ("_t", _type)): 30 s = s.replace(*r) 31 return s 32 33 with open("%s.go" % _type, 'w') as fp: 34 for line in template.splitlines(keepends=True): 35 if line.startswith("package"): 36 fp.write(line) 37 fp.write("\n// Code generated by (tawesoft.co.uk/go/operator) template-numbers.py: DO NOT EDIT.\n") 38 elif "//" not in line: 39 fp.write(replace(line)) 40 else: 41 pos = line.rfind("//") 42 left, right = line[0:pos].rstrip(), line[pos + 2:].strip() 43 44 rest = None 45 if ";" in right: 46 right, rest = right.split(";", maxsplit=1) 47 rest = set([x.strip() for x in rest.split(";")]) 48 49 if right.startswith("IGNORE"): 50 continue 51 elif right.startswith("CLASS"): 52 classes = right[right.find(" "):].split(",") 53 classes = set([x.strip() for x in classes]) 54 if _class in classes: 55 if (rest is None) or \ 56 (("signed" in rest) and (_class == "integers") and signed) or \ 57 (("unsigned" in rest) and (_class == "integers") and (not signed)) or \ 58 (_class != "integers"): 59 60 fp.write(replace(left)+"\n") 61 else: 62 # restore the comment 63 fp.write("// %s\n" % replace(right)) 64 65