Block-Game-Client/runtime/filehandling/srgshandler.py

44 lines
1.6 KiB
Python
Raw Permalink Normal View History

2019-11-17 17:55:58 +01:00
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 8 12:50:02 2011
@author: ProfMobius
@version : v0.1
"""
def parse_srg(srg_filename):
"""Reads a SeargeRG file and returns a dictionary of lists for packages, classes, methods and fields"""
srg_types = {'PK:': ['obf_name', 'deobf_name'],
'CL:': ['obf_name', 'deobf_name'],
'FD:': ['obf_name', 'deobf_name'],
'MD:': ['obf_name', 'obf_desc', 'deobf_name', 'deobf_desc']}
parsed_dict = {'PK': [],
'CL': [],
'FD': [],
'MD': []}
def get_parsed_line(keyword, buf):
return dict(zip(srg_types[keyword], [i.strip() for i in buf]))
with open(srg_filename, 'r') as srg_file:
for buf in srg_file:
buf = buf.strip()
if buf == '' or buf[0] == '#':
continue
buf = buf.split()
parsed_dict[buf[0][:2]].append(get_parsed_line(buf[0], buf[1:]))
return parsed_dict
def writesrgs(filename, data):
"""Writes a srgs file based on data. Data is formatted similar to the output of readsrgs (dict of lists)"""
if not 'PK' in data or not 'CL' in data or not 'FD' in data or not 'MD' in data:
raise Exception("Malformed data for writesrgs. Keys should be in ['PK', 'CL', 'FD', 'MD']")
with open(filename, 'w') as srgsout:
# HINT: We write all the entries for a given key in order
for key in ['PK', 'CL', 'FD', 'MD']:
for entry in data[key]:
srgsout.write('%s: %s %s\n' % (key, entry[0], entry[1]))