1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
#!/usr/bin/python3
import os
import os.path
import re
pkg_re = re.compile("^(private)?\s*package\s*(\S+)")
def recursive_ls(dir):
"""Return the list of ads files in dir and its subdirs"""
result = set()
for f in os.listdir(dir):
if f.endswith(".ads") \
and f.startswith("gnatcoll-"):
private = False
pkg = ""
for l in file(os.path.join(dir, f)).readlines():
m = pkg_re.search(l)
if m:
private = m.group(1)
pkg = m.group(2)
break
if not private:
result.add((pkg, os.path.splitext(f)[0]))
elif os.path.isdir(os.path.join(dir, f)):
result = result.union(recursive_ls(os.path.join(dir, f)))
return result
list = recursive_ls("..")
out = file("help_gnatcoll-bindings.py", "wb")
out.write("""XML = r'''<?xml version="1.0"?>
<GPS>
""")
for pkg, f in sorted(list):
if '__' in f:
# An internal package with a specific naming scheme
continue
menu = pkg.replace(".", "/").replace("_", "__")
# Do we have a submenu ?
in_front = False
for pkg2, b in list:
if b.startswith(f + "-"):
item = menu[menu.rfind("/") + 1:]
menu = menu + "/<" + item + ">"
break
out.write(""" <documentation_file>
<shell>Editor.edit "%(file)s.ads"</shell>
<descr>%(package)s</descr>
<menu>/Help/%(menu)s</menu>
<category>GNAT Components Collection</category>
</documentation_file>
""" % {"file": f, "menu": menu, "package": pkg})
out.write("""</GPS>'''
import GPS
GPS.parse_xml(XML)
""")
out.close()
|