| 1 | |
|---|
| 2 | |
|---|
| 3 | |
|---|
| 4 | """ |
|---|
| 5 | DocBook output support for Lore. |
|---|
| 6 | """ |
|---|
| 7 | |
|---|
| 8 | import os, cgi |
|---|
| 9 | from xml.dom import minidom as dom |
|---|
| 10 | |
|---|
| 11 | from twisted.lore import latex |
|---|
| 12 | |
|---|
| 13 | |
|---|
| 14 | class DocbookSpitter(latex.BaseLatexSpitter): |
|---|
| 15 | |
|---|
| 16 | currentLevel = 1 |
|---|
| 17 | |
|---|
| 18 | def writeNodeData(self, node): |
|---|
| 19 | self.writer(node.data) |
|---|
| 20 | |
|---|
| 21 | def visitNode_body(self, node): |
|---|
| 22 | self.visitNodeDefault(node) |
|---|
| 23 | self.writer('</section>'*self.currentLevel) |
|---|
| 24 | |
|---|
| 25 | def visitNodeHeader(self, node): |
|---|
| 26 | level = int(node.tagName[1]) |
|---|
| 27 | difference, self.currentLevel = level-self.currentLevel, level |
|---|
| 28 | self.writer('<section>'*difference+'</section>'*-difference) |
|---|
| 29 | if difference<=0: |
|---|
| 30 | self.writer('</section>\n<section>') |
|---|
| 31 | self.writer('<title>') |
|---|
| 32 | self.visitNodeDefault(node) |
|---|
| 33 | |
|---|
| 34 | def visitNode_a_listing(self, node): |
|---|
| 35 | fileName = os.path.join(self.currDir, node.getAttribute('href')) |
|---|
| 36 | self.writer('<programlisting>\n') |
|---|
| 37 | self.writer(cgi.escape(open(fileName).read())) |
|---|
| 38 | self.writer('</programlisting>\n') |
|---|
| 39 | |
|---|
| 40 | def visitNode_a_href(self, node): |
|---|
| 41 | self.visitNodeDefault(node) |
|---|
| 42 | |
|---|
| 43 | def visitNode_a_name(self, node): |
|---|
| 44 | self.visitNodeDefault(node) |
|---|
| 45 | |
|---|
| 46 | def visitNode_li(self, node): |
|---|
| 47 | for child in node.childNodes: |
|---|
| 48 | if getattr(child, 'tagName', None) != 'p': |
|---|
| 49 | new = dom.Element('p') |
|---|
| 50 | new.childNodes = [child] |
|---|
| 51 | node.replaceChild(new, child) |
|---|
| 52 | self.visitNodeDefault(node) |
|---|
| 53 | |
|---|
| 54 | visitNode_h2 = visitNode_h3 = visitNode_h4 = visitNodeHeader |
|---|
| 55 | end_h2 = end_h3 = end_h4 = '</title><para />' |
|---|
| 56 | start_title, end_title = '<section><title>', '</title><para />' |
|---|
| 57 | start_p, end_p = '<para>', '</para>' |
|---|
| 58 | start_strong, end_strong = start_em, end_em = '<emphasis>', '</emphasis>' |
|---|
| 59 | start_span_footnote, end_span_footnote = '<footnote><para>', '</para></footnote>' |
|---|
| 60 | start_q = end_q = '"' |
|---|
| 61 | start_pre, end_pre = '<programlisting>', '</programlisting>' |
|---|
| 62 | start_div_note, end_div_note = '<note>', '</note>' |
|---|
| 63 | start_li, end_li = '<listitem>', '</listitem>' |
|---|
| 64 | start_ul, end_ul = '<itemizedlist>', '</itemizedlist>' |
|---|
| 65 | start_ol, end_ol = '<orderedlist>', '</orderedlist>' |
|---|
| 66 | start_dl, end_dl = '<variablelist>', '</variablelist>' |
|---|
| 67 | start_dt, end_dt = '<varlistentry><term>', '</term>' |
|---|
| 68 | start_dd, end_dd = '<listitem><para>', '</para></listitem></varlistentry>' |
|---|