summaryrefslogtreecommitdiff
path: root/build-aux/xml2nroff
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2015-02-19 11:08:53 -0800
committerBen Pfaff <blp@nicira.com>2015-02-19 11:17:07 -0800
commita4e3c49571bb7fd44ed98933d968700f76665c15 (patch)
tree47ed7a66da1ed314c3e8659c65b63fb84221f614 /build-aux/xml2nroff
parent7b8c46c8b54dc4e7893e7e2096da1872e3cd502c (diff)
downloadopenvswitch-a4e3c49571bb7fd44ed98933d968700f76665c15.tar.gz
xml2nroff: New program to generate a manpage from XML input.
I really can't stand nroff syntax. This makes it possible to install nroff but write in a more sensible XML syntax. The following commit adds the first user. Signed-off-by: Ben Pfaff <blp@nicira.com>
Diffstat (limited to 'build-aux/xml2nroff')
-rwxr-xr-xbuild-aux/xml2nroff123
1 files changed, 123 insertions, 0 deletions
diff --git a/build-aux/xml2nroff b/build-aux/xml2nroff
new file mode 100755
index 000000000..8dc9d4f78
--- /dev/null
+++ b/build-aux/xml2nroff
@@ -0,0 +1,123 @@
+#! /usr/bin/python
+
+# Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from datetime import date
+import getopt
+import os
+import sys
+import xml.dom.minidom
+
+from build.nroff import *
+
+argv0 = sys.argv[0]
+
+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
+where INPUT.XML is a manpage in an OVS-specific XML format.
+
+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
+ d = date.fromtimestamp(os.stat(xml_file).st_mtime)
+
+ if version == None:
+ version = "UNKNOWN"
+ program = doc.attributes['program'].nodeValue
+ title = doc.attributes['title'].nodeValue
+ section = doc.attributes['section'].nodeValue
+
+ # Putting '\" p as the first line tells "man" that the manpage
+ # needs to be preprocessed by "pic".
+ s = r''''\" p
+.\" -*- nroff -*-
+.TH "%s" %s "%s" "Open vSwitch %s" "Open vSwitch Manual"
+.fp 5 L CR \\" Make fixed-width font available as \\fL.
+.de TQ
+. br
+. ns
+. TP "\\$1"
+..
+.de ST
+. PP
+. RS -0.15in
+. I "\\$1"
+. RE
+..
+''' % (textToNroff(program), textToNroff(section), textToNroff(title), textToNroff(version))
+
+ s += blockXmlToNroff(doc.childNodes) + "\n"
+
+ return s
+
+def usage():
+ print """\
+%(argv0)s: converts XML in a somewhat HTML-like format to nroff
+usage: %(argv0)s [OPTIONS] XML
+where XML is documentation in a somewhat HTML-like XML format.
+The manpage, in nroff "man" format, is output on stdout.
+
+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)
+
+if __name__ == "__main__":
+ try:
+ options, args = getopt.gnu_getopt(sys.argv[1:], 'hV',
+ ['version=', 'help'])
+ except getopt.GetoptError, geo:
+ sys.stderr.write("%s: %s\n" % (argv0, geo.msg))
+ sys.exit(1)
+
+ er_diagram = None
+ title = None
+ version = None
+ for key, value in options:
+ if key == '--version':
+ version = value
+ elif key in ['-h', '--help']:
+ usage()
+ else:
+ sys.exit(0)
+
+ if len(args) != 1:
+ sys.stderr.write("%s: exactly 1 non-option arguments required "
+ "(use --help for help)\n" % argv0)
+ sys.exit(1)
+
+ try:
+ s = manpage_to_nroff(args[0], version)
+ except error.Error, e:
+ sys.stderr.write("%s: %s\n" % (argv0, e.msg))
+ sys.exit(1)
+ for line in s.splitlines():
+ line = line.strip()
+ if line:
+ print line
+
+
+# Local variables:
+# mode: python
+# End: