-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathgen_gps_help.py
68 lines (53 loc) · 1.66 KB
/
gen_gps_help.py
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/env python
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()