summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2015-09-29 16:53:44 -0700
committerBen Pfaff <blp@nicira.com>2015-09-29 16:56:32 -0700
commit41f17e52e079d9159fba9c78e9ef34f3f96a75b6 (patch)
tree75ababa6e3274675252bb8342d11612f4ae2bcb5 /python
parenta634c5317afcbb15a071ed1cb9a4c4299c320a4d (diff)
downloadopenvswitch-41f17e52e079d9159fba9c78e9ef34f3f96a75b6.tar.gz
nroff: Support inline XML inside <pre> blocks.
This is useful so that one can write, e.g. <p>The following shows how to add 1 to variable <var>x</var>:</p> <pre> <var>x</var> = <var>x</var> + 1; </pre> Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Justin Pettit <jpettit@nicira.com>
Diffstat (limited to 'python')
-rw-r--r--python/build/nroff.py26
1 files changed, 14 insertions, 12 deletions
diff --git a/python/build/nroff.py b/python/build/nroff.py
index 537bfd56e..3eaffe78c 100644
--- a/python/build/nroff.py
+++ b/python/build/nroff.py
@@ -58,17 +58,18 @@ def text_to_nroff(s, font=r'\fR'):
def escape_nroff_literal(s, font=r'\fB'):
return font + r'%s\fR' % text_to_nroff(s, font)
-def inline_xml_to_nroff(node, font, to_upper=False):
+def inline_xml_to_nroff(node, font, to_upper=False, newline='\n'):
if node.nodeType == node.TEXT_NODE:
if to_upper:
- return text_to_nroff(node.data.upper(), font)
+ s = text_to_nroff(node.data.upper(), font)
else:
- return text_to_nroff(node.data, font)
+ s = text_to_nroff(node.data, font)
+ return s.replace('\n', newline)
elif node.nodeType == node.ELEMENT_NODE:
if node.tagName in ['code', 'em', 'option', 'env']:
s = r'\fB'
for child in node.childNodes:
- s += inline_xml_to_nroff(child, r'\fB')
+ s += inline_xml_to_nroff(child, r'\fB', to_upper, newline)
return s + font
elif node.tagName == 'ref':
s = r'\fB'
@@ -88,22 +89,23 @@ def inline_xml_to_nroff(node, font, to_upper=False):
elif node.tagName == 'var' or node.tagName == 'dfn':
s = r'\fI'
for child in node.childNodes:
- s += inline_xml_to_nroff(child, r'\fI')
+ s += inline_xml_to_nroff(child, r'\fI', to_upper, newline)
return s + font
else:
raise error.Error("element <%s> unknown or invalid here" % node.tagName)
+ elif node.nodeType == node.COMMENT_NODE:
+ return ''
else:
raise error.Error("unknown node %s in inline xml" % node)
def pre_to_nroff(nodes, para, font):
- s = para + '\n.nf\n'
+ # This puts 'font' at the beginning of each line so that leading and
+ # trailing whitespace stripping later doesn't removed leading spaces
+ # from preformatted text.
+ s = para + '\n.nf\n' + font
for node in nodes:
- if node.nodeType == node.TEXT_NODE:
- for line in node.data.split('\n'):
- s += escape_nroff_literal(line, font) + '\n.br\n'
- elif node.nodeType != node.COMMENT_NODE:
- fatal("<pre> element may only have text children")
- s += '.fi\n'
+ s += inline_xml_to_nroff(node, font, False, '\n.br\n' + font)
+ s += '\n.fi\n'
return s
def diagram_header_to_nroff(header_node):