1 # Copyright (c) Twisted Matrix Laboratories.
2 # See LICENSE for details.
6 from cStringIO import StringIO
8 from twisted.python import text
9 from twisted.web import domhelpers
12 spaceRe = re.compile('\s+')
15 return spaceRe.sub(text, ' ')
17 entities = latex.entities.copy()
18 entities['copy'] = '@copyright{}'
20 class TexiSpitter(latex.BaseLatexSpitter):
24 def writeNodeData(self, node):
26 latex.getLatexText(node, self.writer, texiEscape, entities)
28 def visitNode_title(self, node):
30 self.visitNodeDefault(node)
32 self.writer('@section ')
33 self.visitNodeDefault(node)
35 headers = tree.getHeaders(domhelpers.getParents(node)[-1])
38 self.writer('@menu\n')
39 for header in headers:
40 self.writer('* %s::\n' % domhelpers.getNodeText(header))
41 self.writer('@end menu\n')
43 def visitNode_pre(self, node):
44 self.writer('@verbatim\n')
46 latex.getLatexText(node, buf.write, entities=entities)
47 self.writer(text.removeLeadingTrailingBlanks(buf.getvalue()))
48 self.writer('@end verbatim\n')
50 def visitNode_code(self, node):
52 latex.getLatexText(node, fout.write, texiEscape, entities)
53 self.writer('@code{'+fout.getvalue()+'}')
55 def visitNodeHeader(self, node):
56 self.writer('\n\n@node ')
57 self.visitNodeDefault(node)
59 level = (int(node.tagName[1])-2)+self.baseLevel
60 self.writer('\n\n@'+level*'sub'+'section ')
61 self.visitNodeDefault(node)
64 def visitNode_a_listing(self, node):
65 fileName = os.path.join(self.currDir, node.getAttribute('href'))
66 self.writer('@verbatim\n')
67 self.writer(open(fileName).read())
68 self.writer('@end verbatim')
69 # Write a caption for this source listing
71 def visitNode_a_href(self, node):
72 self.visitNodeDefault(node)
74 def visitNode_a_name(self, node):
75 self.visitNodeDefault(node)
77 visitNode_h2 = visitNode_h3 = visitNode_h4 = visitNodeHeader
79 start_dl = '@itemize\n'
80 end_dl = '@end itemize\n'
81 start_ul = '@itemize\n'
82 end_ul = '@end itemize\n'
84 start_ol = '@enumerate\n'
85 end_ol = '@end enumerate\n'
96 start_strong = start_em = '@emph{'
97 end_strong = end_em = '}'
102 start_span_footnote = '@footnote{'
103 end_span_footnote = '}'
105 start_div_note = '@quotation\n@strong{Note:}'
106 end_div_note = '@end quotation\n'
108 start_th = '@strong{'