diff options
Diffstat (limited to 'ast2json')
-rwxr-xr-x | ast2json/imachine2json.py | 19 | ||||
-rwxr-xr-x | ast2json/rpyc2json.py | 5 | ||||
-rwxr-xr-x | ast2json/strings2json.py | 22 |
3 files changed, 45 insertions, 1 deletions
diff --git a/ast2json/imachine2json.py b/ast2json/imachine2json.py new file mode 100755 index 0000000..db1878c --- /dev/null +++ b/ast2json/imachine2json.py @@ -0,0 +1,19 @@ +#!/usr/bin/env python3 + +import json +import sys + +def imachine2json(ast): + ret = {} + if ast[0]['_type'] != 'Label': + raise TypeError('obj does not start with Label, wrong file?') + for label in ast: + if label['parameters'] is not None or label['hide']: + raise NotImplementedError() + ret[label['name']] = label + return ret + +with open(sys.argv[1], 'r') as f: + output = imachine2json(json.load(f)) + +json.dump(output, open(sys.argv[2], 'w'), separators=(',', ':')) diff --git a/ast2json/rpyc2json.py b/ast2json/rpyc2json.py index 2caf53e..1bf9b73 100755 --- a/ast2json/rpyc2json.py +++ b/ast2json/rpyc2json.py @@ -67,7 +67,10 @@ def get_value(attr_value): if isinstance(attr_value, renpy.ast.Node): return node2json(attr_value) if isinstance(attr_value, renpy.ast.PyCode): - return ast2json.str2json(attr_value.source) + return { + "source": attr_value.source, + "ast": ast2json.str2json(attr_value.source) + } if isinstance(attr_value, renpy.ast.ArgumentInfo): return list(map(lambda x: getattr(attr_value, x), ["arguments", "extrapos", "extrakw"])) if isinstance(attr_value, renpy.atl.RawBlock): diff --git a/ast2json/strings2json.py b/ast2json/strings2json.py new file mode 100755 index 0000000..0736a10 --- /dev/null +++ b/ast2json/strings2json.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +import json +import sys + +def strings2json(ast): + ret = {} + if ast[0]['_type'] != 'Init': raise TypeError('obj does not start with Init, wrong file?') + for string in ast[0]['block'][0]['code']['ast']['body'][1:]: + target = string['targets'][0] + if target['_type'] == 'Attribute': + name = string['targets'][0]['attr'] + value = string['value'] + vtype = value['_type'] + if vtype == 'Str': + ret[name] = value['s'] + return ret + +with open(sys.argv[1], 'r') as f: + output = strings2json(json.load(f)) + +json.dump(output, open(sys.argv[2], 'w'), separators=(',', ':')) |