s = r'\fB'
if node.hasAttribute('column'):
s += node.attributes['column'].nodeValue
+ if node.hasAttribute('key'):
+ s += ':' + node.attributes['key'].nodeValue
elif node.hasAttribute('table'):
s += node.attributes['table'].nodeValue
elif node.hasAttribute('group'):
and liNode.tagName == 'li'):
i += 1
if node.tagName == 'ul':
- s += ".IP \\bu\n"
+ s += ".IP \\(bu\n"
else:
s += ".IP %d. .25in\n" % i
s += blockXmlToNroff(liNode.childNodes, ".IP")
constraints = column.type.constraintsToEnglish(escapeNroffLiteral)
if constraints:
type += ", " + constraints
+ if column.unique:
+ type += " (must be unique within table)"
return type
def columnToNroff(columnName, column, node):
s = ""
for type, name, arg in summary:
if type == 'column':
-
+
s += "%s\\fB%s\\fR\tT{\n%s\nT}\n" % (
r'\ \ ' * level, name, typeAndConstraintsToNroff(arg))
else:
def docsToNroff(schemaFile, xmlFile, erFile, title=None):
schema = ovs.db.schema.DbSchema.from_json(ovs.json.from_file(schemaFile))
doc = xml.dom.minidom.parse(xmlFile).documentElement
-
+
schemaDate = os.stat(schemaFile).st_mtime
xmlDate = os.stat(xmlFile).st_mtime
d = date.fromtimestamp(max(schemaDate, xmlDate))
-
+
if title == None:
title = schema.name
.de TQ
. br
. ns
-. TP "\\$1"
+. TP
+\\$1
..
.de ST
. PP
if erFile:
s += """
+.if !'\*[.T]'ascii' \{
.sp 1
.SH "TABLE RELATIONSHIPS"
.PP
The following diagram shows the relationship among tables in the
-database. Each node represents a table. Each edge leads from the
+database. Each node represents a table. Tables that are part of the
+``root set'' are shown with double borders. Each edge leads from the
table that contains it and points to the table that its value
-represents. Edges are labeled with their column names.
+represents. Edges are labeled with their column names, followed by a
+constraint on the number of allowed values: \\fB?\\fR for zero or one,
+\\fB*\\fR for zero or more, \\fB+\\fR for one or more. Thick lines
+represent strong references; thin lines represent weak references.
.RS -1in
"""
erStream = open(erFile, "r")
for line in erStream:
s += line + '\n'
erStream.close()
- s += ".RE\n"
+ s += ".RE\\}\n"
for node in tableNodes:
s += tableToNroff(schema, node) + "\n"
print "ovsdb-doc (Open vSwitch) @VERSION@"
else:
sys.exit(0)
-
+
if len(args) != 2:
sys.stderr.write("%s: exactly 2 non-option arguments required "
"(use --help for help)\n" % argv0)
sys.exit(1)
-
+
# XXX we should warn about undocumented tables or columns
s = docsToNroff(args[0], args[1], er_diagram)
for line in s.split("\n"):
line = line.strip()
if len(line):
print line
-
+
except error.Error, e:
sys.stderr.write("%s: %s\n" % (argv0, e.msg))
sys.exit(1)