| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 
							- #!/usr/bin/env python
 
- import re
 
- import sys
 
- from pprint import pprint
 
- def enum_options(file):
 
-     # key = *opts*, value = refid, remove proceeding -- from long
 
-     # option name and s/-/_/g and prepend '_optref'
 
-     ref_db = {}
 
-     p = re.compile(r'^\*(-[a-zA-Z0-9-]+)\*(?:,\s*\*(-[a-zA-Z0-9-]+)\*)?.*::$')
 
-     for line in file:
 
-         m = p.match(line)
 
-         if m:
 
-             if m.group(2) is None:
 
-                 short_opt = None
 
-                 long_opt = m.group(1)
 
-             else:
 
-                 short_opt = m.group(1)
 
-                 long_opt = m.group(2)
 
-             ref_id = make_ref_id(long_opt)
 
-             if short_opt in ref_db:
 
-                 print "warn: duplicate short_opt", short_opt
 
-             if long_opt in ref_db:
 
-                 print "warn: duplicate long_opt", log_opt
 
-             if short_opt:
 
-                 ref_db[short_opt] = ref_id
 
-             ref_db[long_opt] = ref_id
 
-     return ref_db
 
- def make_ref_id(long_opt):
 
-     return 'aria2_optref_'+long_opt.strip('*').lstrip('-').replace('-', '_')
 
- def make_cross_ref(out, file, ref_db):
 
-     opt_def = re.compile(r'^\*(-[a-zA-Z0-9-]+)\*(?:,\s*\*(-[a-zA-Z0-9-]+)\*)?.*::$')
 
-     opt_ref = re.compile(r'\*(-[a-zA-Z0-9-]+)\*')
 
-     for line in file:
 
-         m = opt_def.match(line)
 
-         if m:
 
-             if m.group(2) is None:
 
-                 long_opt = m.group(1)
 
-             else:
 
-                 long_opt = m.group(2)
 
-             out.write('[[{0}]]'.format(ref_db[long_opt]))
 
-             out.write(line)
 
-             continue
 
-         pos = 0
 
-         while 1:
 
-             m = opt_ref.search(line, pos)
 
-             if m:
 
-                 opt = line[m.start(1):m.end(1)]
 
-                 if opt in ref_db:
 
-                     out.write(line[pos:m.start(0)])
 
-                     out.write('*<<{0}, {1}>>*'.format(ref_db[opt], opt))
 
-                 else:
 
-                     print "warn: not in ref_db", opt
 
-                     out.write(line[pos:m.end(0)])
 
-                 pos = m.end(0)
 
-             else:
 
-                 out.write(line[pos:])
 
-                 break
 
- if __name__ == '__main__':
 
-     with open(sys.argv[1]) as f:
 
-         ref_db = enum_options(f)
 
-     with open(sys.argv[1]) as f:
 
-         with open(sys.argv[2], 'wb') as out:
 
-             make_cross_ref(out, f, ref_db)
 
 
  |