From b59de254f20cd85db0dde9b1cbbfdb3816a21d27 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 16 Jun 2015 08:22:46 -0700 Subject: [PATCH] xml2nroff: Add support for variable substitutions. This allows XML-generated manpages in the source tree to include correct directory names for the local configuration, instead of just the plain nroff ones. Signed-off-by: Ben Pfaff Acked-by: Alex Wang --- build-aux/xml2nroff | 29 ++++++++++++++++++++++++----- ovn/automake.mk | 17 +++++++++++++++-- 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/build-aux/xml2nroff b/build-aux/xml2nroff index 8dc9d4f78cd..1df195e59c5 100755 --- a/build-aux/xml2nroff +++ b/build-aux/xml2nroff @@ -28,17 +28,26 @@ def usage(): print """\ %(argv0)s: XML to nroff converter Converts the XML format supplied as input into an nroff-formatted manpage. -usage: %(argv0)s [OPTIONS] INPUT.XML +usage: %(argv0)s [OPTIONS] INPUT.XML [VAR=VALUE]... where INPUT.XML is a manpage in an OVS-specific XML format. +Each VAR, when enclosed by "@"s in the input, is replaced by its +corresponding VALUE, with characters &<>"' in VALUE escaped. + The following options are also available: --version=VERSION use VERSION to display on document footer -h, --help display this help message\ """ % {'argv0': argv0} sys.exit(0) -def manpage_to_nroff(xml_file, version=None): - doc = xml.dom.minidom.parse(xml_file).documentElement +def manpage_to_nroff(xml_file, subst, version=None): + f = open(xml_file) + input = [] + for line in f: + for k, v in subst.iteritems(): + line = line.replace(k, v) + input += [line] + doc = xml.dom.minidom.parseString(''.join(input)).documentElement d = date.fromtimestamp(os.stat(xml_file).st_mtime) if version == None: @@ -102,13 +111,23 @@ if __name__ == "__main__": else: sys.exit(0) - if len(args) != 1: + if len(args) < 1: sys.stderr.write("%s: exactly 1 non-option arguments required " "(use --help for help)\n" % argv0) sys.exit(1) + subst = {} + for s in args[1:]: + var, value = s.split('=', 1) + value = value.replace('&', '&') + value = value.replace('<', '<') + value = value.replace('>', '>') + value = value.replace('"', '"') + value = value.replace("'", ''') + subst['@%s@' % var] = value + try: - s = manpage_to_nroff(args[0], version) + s = manpage_to_nroff(args[0], subst, version) except error.Error, e: sys.stderr.write("%s: %s\n" % (argv0, e.msg)) sys.exit(1) diff --git a/ovn/automake.mk b/ovn/automake.mk index 1ebaa55f7dd..7eb9c1d5dfa 100644 --- a/ovn/automake.mk +++ b/ovn/automake.mk @@ -71,8 +71,21 @@ EXTRA_DIST += ovn/ovn-architecture.7.xml ovn/ovn-nbctl.8.xml SUFFIXES += .xml %: %.xml - $(AM_V_GEN)$(run_python) $(srcdir)/build-aux/xml2nroff \ - --version=$(VERSION) $< > $@.tmp && mv $@.tmp $@ + $(AM_V_GEN)$(run_python) $(srcdir)/build-aux/xml2nroff $< > $@.tmp \ + --version=$(VERSION) \ + PKIDIR='$(PKIDIR)' \ + LOGDIR='$(LOGDIR)' \ + DBDIR='$(DBDIR)' \ + PERL='$(PERL)' \ + PYTHON='$(PYTHON)' \ + RUNDIR='$(RUNDIR)' \ + VERSION='$(VERSION)' \ + localstatedir='$(localstatedir)' \ + pkgdatadir='$(pkgdatadir)' \ + sysconfdir='$(sysconfdir)' \ + bindir='$(bindir)' \ + sbindir='$(sbindir)' + $(AM_v_at)mv $@.tmp $@ EXTRA_DIST += \ ovn/TODO \