| 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>' |
|---|