From 51a4e04768c4b64208b48c0833e1edbbfad2de92 Mon Sep 17 00:00:00 2001 From: Rangi Date: Fri, 1 Jun 2018 11:10:12 -0400 Subject: Parse charmap.asm for dump_text.py and dump_names.py --- tools/read_charmap.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 tools/read_charmap.py (limited to 'tools/read_charmap.py') diff --git a/tools/read_charmap.py b/tools/read_charmap.py new file mode 100644 index 0000000..9f396b4 --- /dev/null +++ b/tools/read_charmap.py @@ -0,0 +1,43 @@ +import os, io + +def parse_int(s): + # assumes integers are literal; no +-*/, etc + s = s.strip() + if s.startswith('$'): + return int(s[1:], 16) + if s.startswith('%'): + return int(s[1:], 2) + return int(s) + +def parse_string(s): + # assumes strings are literal; no STRCAT() etc + return s.strip('" ') + +def strip_comment(s): + # assumes ";" is not in the charmap + return s.split(';')[0].rstrip() + +def get_project_dir(): + script_path = os.path.realpath(__file__) + script_dir = os.path.dirname(script_path) + project_dir = os.path.join(script_dir, '..') + return os.path.normpath(project_dir) + +def get_charmap_path(): + project_dir = get_project_dir() + return os.path.join(project_dir, 'charmap.asm') + +def read_charmap(): + charmap_path = get_charmap_path() + charmap = {} + with io.open(charmap_path, 'r', encoding='utf-8') as f: + lines = f.readlines() + for line in lines: + line = strip_comment(line).lstrip() + if not line.startswith('charmap '): + continue + char, value = line[len('charmap '):].rsplit(',', 1) + char = parse_string(char) + value = parse_int(value) + charmap[value] = char + return charmap -- cgit v1.2.3