| 143 | 1 import re | 
|  | 2 comment = re.compile('/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/', re.MULTILINE) | 
|  | 3 | 
|  | 4 def read(filename): | 
|  | 5     token = '##//' # magical token | 
|  | 6     lines = [i.strip() for i in file(filename).readlines() if i.strip()] | 
|  | 7     retval = {} | 
|  | 8     _lines = [] | 
|  | 9     for line in lines: | 
|  | 10         if line.startswith('#'): | 
|  | 11             continue | 
|  | 12         if '//' in line: | 
|  | 13             line = line.replace('//', token) | 
|  | 14         _lines.append(line) | 
|  | 15     string = '\n'.join(_lines) | 
|  | 16     string = re.sub(comment, '', string) | 
|  | 17     def pref(a, b): | 
|  | 18         retval[a] = b | 
|  | 19     lines = [i.strip().rstrip(';') for i in string.split('\n') if i.strip()] | 
|  | 20     for line in lines: | 
|  | 21         try: | 
|  | 22             _globals = {'retval': retval, 'pref': pref, 'user_pref': pref, 'true': True, 'false': False} | 
|  | 23             eval(line, _globals, {}) | 
|  | 24         except SyntaxError: | 
|  | 25             print line | 
|  | 26             import pdb; pdb.set_trace() | 
|  | 27     for key in retval: | 
|  | 28         if isinstance(retval[key], basestring) and token in retval[key]: | 
|  | 29             retval[key] = retval[key].replace(token, '//') | 
|  | 30     return retval | 
|  | 31 | 
|  | 32 def write(filename, prefs, pref_string='user_pref("%s", %s);'): | 
|  | 33     f = file(filename, 'w') | 
|  | 34     for key, value in prefs.items(): | 
|  | 35         if value is True: | 
|  | 36             print >> f, pref_string % (key, 'true') | 
|  | 37         elif value is False: | 
|  | 38             print >> f, pref_string % (key, 'true') | 
|  | 39         elif isinstance(value, basestring): | 
|  | 40             print >> f, pref_string % (key, repr(string(value))) | 
|  | 41         else: | 
|  | 42             print >> f, pref_string % (key, value) # should be numeric! | 
|  | 43     f.close() | 
|  | 44 | 
|  | 45 if __name__ == '__main__': | 
|  | 46     import sys | 
|  | 47     if not sys.argv[1:]: | 
|  | 48         sys.exit(1) | 
|  | 49     print read(sys.argv[1]) |