diff options
author | Ben Pfaff <blp@nicira.com> | 2015-09-29 16:53:44 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2015-09-29 16:56:32 -0700 |
commit | 41f17e52e079d9159fba9c78e9ef34f3f96a75b6 (patch) | |
tree | 75ababa6e3274675252bb8342d11612f4ae2bcb5 /python | |
parent | a634c5317afcbb15a071ed1cb9a4c4299c320a4d (diff) | |
download | openvswitch-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.py | 26 |
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): |