summaryrefslogtreecommitdiff
path: root/py/makeqstrdefs.py
diff options
context:
space:
mode:
Diffstat (limited to 'py/makeqstrdefs.py')
-rw-r--r--py/makeqstrdefs.py89
1 files changed, 48 insertions, 41 deletions
diff --git a/py/makeqstrdefs.py b/py/makeqstrdefs.py
index d3e90ba48..e6c003311 100644
--- a/py/makeqstrdefs.py
+++ b/py/makeqstrdefs.py
@@ -15,51 +15,54 @@ import os
# - iterating through bytes is different
# - codepoint2name lives in a different module
import platform
-if platform.python_version_tuple()[0] == '2':
+
+if platform.python_version_tuple()[0] == "2":
bytes_cons = lambda val, enc=None: bytearray(val)
from htmlentitydefs import name2codepoint
-elif platform.python_version_tuple()[0] == '3':
+elif platform.python_version_tuple()[0] == "3":
bytes_cons = bytes
from html.entities import name2codepoint
+
unichr = chr
# end compatibility code
# Blacklist of qstrings that are specially handled in further
# processing and should be ignored
-QSTRING_BLACK_LIST = set(['NULL', 'number_of'])
+QSTRING_BLACK_LIST = set(["NULL", "number_of"])
# add some custom names to map characters that aren't in HTML
-name2codepoint['hyphen'] = ord('-')
-name2codepoint['space'] = ord(' ')
-name2codepoint['squot'] = ord('\'')
-name2codepoint['comma'] = ord(',')
-name2codepoint['dot'] = ord('.')
-name2codepoint['colon'] = ord(':')
-name2codepoint['semicolon'] = ord(';')
-name2codepoint['slash'] = ord('/')
-name2codepoint['percent'] = ord('%')
-name2codepoint['hash'] = ord('#')
-name2codepoint['paren_open'] = ord('(')
-name2codepoint['paren_close'] = ord(')')
-name2codepoint['bracket_open'] = ord('[')
-name2codepoint['bracket_close'] = ord(']')
-name2codepoint['brace_open'] = ord('{')
-name2codepoint['brace_close'] = ord('}')
-name2codepoint['star'] = ord('*')
-name2codepoint['bang'] = ord('!')
-name2codepoint['backslash'] = ord('\\')
-name2codepoint['plus'] = ord('+')
-name2codepoint['dollar'] = ord('$')
-name2codepoint['equals'] = ord('=')
-name2codepoint['question'] = ord('?')
-name2codepoint['at_sign'] = ord('@')
-name2codepoint['caret'] = ord('^')
-name2codepoint['pipe'] = ord('|')
-name2codepoint['tilde'] = ord('~')
+name2codepoint["hyphen"] = ord("-")
+name2codepoint["space"] = ord(" ")
+name2codepoint["squot"] = ord("'")
+name2codepoint["comma"] = ord(",")
+name2codepoint["dot"] = ord(".")
+name2codepoint["colon"] = ord(":")
+name2codepoint["semicolon"] = ord(";")
+name2codepoint["slash"] = ord("/")
+name2codepoint["percent"] = ord("%")
+name2codepoint["hash"] = ord("#")
+name2codepoint["paren_open"] = ord("(")
+name2codepoint["paren_close"] = ord(")")
+name2codepoint["bracket_open"] = ord("[")
+name2codepoint["bracket_close"] = ord("]")
+name2codepoint["brace_open"] = ord("{")
+name2codepoint["brace_close"] = ord("}")
+name2codepoint["star"] = ord("*")
+name2codepoint["bang"] = ord("!")
+name2codepoint["backslash"] = ord("\\")
+name2codepoint["plus"] = ord("+")
+name2codepoint["dollar"] = ord("$")
+name2codepoint["equals"] = ord("=")
+name2codepoint["question"] = ord("?")
+name2codepoint["at_sign"] = ord("@")
+name2codepoint["caret"] = ord("^")
+name2codepoint["pipe"] = ord("|")
+name2codepoint["tilde"] = ord("~")
# These are just vexing!
-del name2codepoint['and']
-del name2codepoint['or']
+del name2codepoint["and"]
+del name2codepoint["or"]
+
def write_out(fname, output):
if output:
@@ -68,18 +71,20 @@ def write_out(fname, output):
with open(args.output_dir + "/" + fname + ".qstr", "w") as f:
f.write("\n".join(output) + "\n")
+
def qstr_unescape(qstr):
for name in name2codepoint:
if "__" + name + "__" in qstr:
continue
if "_" + name + "_" in qstr:
- qstr = qstr.replace("_" + name + "_", str(unichr(name2codepoint[name])))
+ qstr = qstr.replace("_" + name + "_", str(unichr(name2codepoint[name])))
return qstr
+
def process_file(f):
re_line = re.compile(r"#[line]*\s(\d+)\s\"([^\"]+)\"")
- re_qstr = re.compile(r'MP_QSTR_[_a-zA-Z0-9]+')
- re_translate = re.compile(r'translate\(\"((?:(?=(\\?))\2.)*?)\"\)')
+ re_qstr = re.compile(r"MP_QSTR_[_a-zA-Z0-9]+")
+ re_translate = re.compile(r"translate\(\"((?:(?=(\\?))\2.)*?)\"\)")
output = []
last_fname = None
lineno = 0
@@ -87,10 +92,10 @@ def process_file(f):
if line.isspace():
continue
# match gcc-like output (# n "file") and msvc-like output (#line n "file")
- if line.startswith(('# ', '#line')):
+ if line.startswith(("# ", "#line")):
m = re_line.match(line)
assert m is not None
- #print(m.groups())
+ # print(m.groups())
lineno = int(m.group(1))
fname = m.group(2)
if not fname.endswith(".c"):
@@ -101,9 +106,9 @@ def process_file(f):
last_fname = fname
continue
for match in re_qstr.findall(line):
- name = match.replace('MP_QSTR_', '')
+ name = match.replace("MP_QSTR_", "")
if name not in QSTRING_BLACK_LIST:
- output.append('Q(' + qstr_unescape(name) + ')')
+ output.append("Q(" + qstr_unescape(name) + ")")
for match in re_translate.findall(line):
output.append('TRANSLATE("' + match[0] + '")')
lineno += 1
@@ -115,6 +120,7 @@ def process_file(f):
def cat_together():
import glob
import hashlib
+
hasher = hashlib.md5()
all_lines = []
outf = open(args.output_dir + "/out", "wb")
@@ -128,7 +134,7 @@ def cat_together():
outf.close()
hasher.update(all_lines)
new_hash = hasher.hexdigest()
- #print(new_hash)
+ # print(new_hash)
old_hash = None
try:
with open(args.output_file + ".hash") as f:
@@ -151,11 +157,12 @@ def cat_together():
if __name__ == "__main__":
if len(sys.argv) != 5:
- print('usage: %s command input_filename output_dir output_file' % sys.argv[0])
+ print("usage: %s command input_filename output_dir output_file" % sys.argv[0])
sys.exit(2)
class Args:
pass
+
args = Args()
args.command = sys.argv[1]
args.input_filename = sys.argv[2]