3 # Process a list of Python and/or XML files containing SCons documentation.
5 # Depending on the options, this script creates DocBook-formatted lists
6 # of the Builders, Tools or construction variables in generated SGML
7 # files containing the summary text and/or .mod files contining the
8 # ENTITY definitions for each item.
20 base_sys_path = [os.getcwd() + '/build/test-tar-gz/lib/scons'] + sys.path
23 Usage: scons-varlist.py [-b .gen,.mod] [-t .gen,.mod] [-v .gen,.mod] [infile]
25 -m, --modfile .mod file to hold Builder entities
28 opts, args = getopt.getopt(sys.argv[1:],
30 ['builders=', 'tools=', 'variables='])
37 if o == '-b' or o == '--builders':
39 elif o == '-t' or o == '--tools':
41 elif o == '-v' or o == '--variables':
44 h = SConsDoc.SConsDocHandler()
45 saxparser = xml.sax.make_parser()
46 saxparser.setContentHandler(h)
47 saxparser.setErrorHandler(h)
59 _, ext = os.path.splitext(f)
61 dir, _ = os.path.split(f)
63 sys.path = [dir] + base_sys_path
64 module = SConsDoc.importfile(f)
65 h.set_file_info(f, len(preamble.split('\n')))
67 content = module.__scons_doc__
68 except AttributeError:
71 del module.__scons_doc__
73 h.set_file_info(f, len(preamble.split('\n')))
74 content = open(f).read()
76 content = content.replace('&', '&')
77 input = preamble + content + postamble
79 saxparser.parse(StringIO.StringIO(input))
81 sys.stderr.write("error in %s\n" % f)
86 THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
90 Regular_Entities_Header = """\
98 Link_Entities_Header = """\
101 Entities that are links to the %s entries in the appendix.
107 def __init__(self, entries, **kw):
108 values = entries.values()
111 for k, v in kw.items():
113 def write_gen(self, filename):
116 f = open(filename, 'w')
117 for v in self.values:
118 f.write('\n<varlistentry id="%s%s">\n' %
119 (self.prefix, self.idfunc(v.name)))
120 for term in self.termfunc(v.name):
121 f.write('<term><%s>%s</%s></term>\n' %
122 (self.tag, term, self.tag))
123 f.write('<listitem>\n')
124 for chunk in v.summary.body:
127 # u = map(lambda x, s: '&%slink-%s;' % (s.prefix, x), v.uses)
128 # f.write('<para>\n')
129 # f.write('Uses: ' + ', '.join(u) + '.\n')
130 # f.write('</para>\n')
131 f.write('</listitem>\n')
132 f.write('</varlistentry>\n')
133 def write_mod(self, filename):
136 f = open(filename, 'w')
139 f.write(Regular_Entities_Header % self.description)
141 for v in self.values:
142 f.write('<!ENTITY %s%s "<%s>%s</%s>">\n' %
143 (self.prefix, self.idfunc(v.name),
144 self.tag, self.entityfunc(v.name), self.tag))
148 f.write(Link_Entities_Header % self.description)
150 for v in self.values:
151 f.write('<!ENTITY %slink-%s \'<link linkend="%s%s"><%s>%s</%s></link>\'>\n' %
152 (self.prefix, self.idfunc(v.name),
153 self.prefix, self.idfunc(v.name),
154 self.tag, self.entityfunc(v.name), self.tag))
160 description = 'builder',
163 idfunc = lambda x: x,
164 termfunc = lambda x: [x+'()', 'env.'+x+'()'],
165 entityfunc = lambda x: x)
167 gen, mod = string.split(buildersfiles, ',')
173 description = 'tool',
176 idfunc = lambda x: string.replace(x, '+', 'X'),
177 termfunc = lambda x: [x],
178 entityfunc = lambda x: x)
180 gen, mod = string.split(toolsfiles, ',')
186 description = 'construction variable',
189 idfunc = lambda x: x,
190 termfunc = lambda x: [x],
191 entityfunc = lambda x: '$'+x)
193 gen, mod = string.split(variablesfiles, ',')