You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
# -*- 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]))
|