Skip to content

Commit

Permalink
Add support for Inner/Named Links and Underline to docbook
Browse files Browse the repository at this point in the history
This lets us run many more tests, getting overall coverage up to 88%.
  • Loading branch information
jamadden committed Aug 21, 2017
1 parent 4969a4c commit 519315d
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 18 deletions.
45 changes: 36 additions & 9 deletions src/zope/structuredtext/docbook.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,10 @@ class DocBook(object):
'StructuredTextLiteral': 'literal',
'StructuredTextEmphasis': 'emphasis',
'StructuredTextStrong': 'strong',
'StructuredTextUnderline':'underline',
'StructuredTextLink': 'link',
'StructuredTextInnerLink':'innerLink',
'StructuredTextNamedLink':'namedLink',
'StructuredTextXref': 'xref',
'StructuredTextSGML': 'sgml',
}
Expand Down Expand Up @@ -166,26 +169,50 @@ def link(self, doc, level, output):
)(c, level, output)
output('</ulink>')

def emphasis(self, doc, level, output):
output('<emphasis>')
def innerLink(self, doc, level, output):
output('<ulink href="#ref')
for c in doc.getChildNodes():
getattr(self, self.element_types[c.getNodeName()]
)(c, level, output)
output('">[')
for c in doc.getChildNodes():
getattr(self, self.element_types[c.getNodeName()]
)(c, level, output)
output(']</ulink>')

def namedLink(self, doc, level, output):
output('<anchor id="ref')
for c in doc.getChildNodes():
getattr(self, self.element_types[c.getNodeName()]
)(c, level, output)
output('"/>[')
for c in doc.getChildNodes():
getattr(self, self.element_types[c.getNodeName()]
)(c, level, output)
output(']')

def _emphasis(self, doc, level, output, role):
output('<emphasis Role="%s">' % role)
for c in doc.getChildNodes():
getattr(self, self.element_types[c.getNodeName()]
)(c, level, output)
output('</emphasis> ')

def emphasis(self, doc, level, output):
self._emphasis(doc, level, output, 'emphasis')

def strong(self, doc, level, output):
self._emphasis(doc, level, output, 'strong')

def underline(self, doc, level, output):
self._emphasis(doc, level, output, 'underline')

def literal(self, doc, level, output):
output('<literal>')
for c in doc.getChildNodes():
output(c.getNodeValue())
output('</literal>')

def strong(self, doc, level, output):
output('<emphasis>')
for c in doc.getChildNodes():
getattr(self, self.element_types[c.getNodeName()]
)(c, level, output)
output('</emphasis>')

def xref(self, doc, level, output):
output('<xref linkend="%s"/>' % doc.getNodeValue())

Expand Down
16 changes: 7 additions & 9 deletions src/zope/structuredtext/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ def testDocumentClass(self):
doc = Document()
self.assertTrue(doc(text))

def _compare(self, filename, output, expected_extension=".ref"):
expected_filename = filename.replace('.stx', expected_extension)
expected = readFile(regressions, expected_filename)

self.assertEqual(output.strip(), expected.strip())

def testHTMLRegressions(self):
# HTML regression test
from zope.structuredtext.document import Document
Expand All @@ -65,21 +71,13 @@ def testHTMLRegressions(self):
doc = Document()(text)
html = HTML()(doc)

reg_fname = f.replace('.stx', '.ref')
reg_html = readFile(regressions, reg_fname)

self.assertEqual(reg_html.strip(), html.strip())
self._compare(f, html)

def testDocBookRegressions(self):
from zope.structuredtext.document import Document
from zope.structuredtext.docbook import DocBook

fails_to_docbook = {
# Doesn't support StructuredTextInnerLink
'Acquisition.stx',
'ExtensionClass.stx',
'examples.stx',
'InnerLinks.stx',
# Doesn't support StructuredTextTable
'table.stx',
}
Expand Down

0 comments on commit 519315d

Please sign in to comment.