| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2001-2004 Twisted Matrix Laboratories. | |
| 2 # See LICENSE for details. | |
| 3 | |
| 4 # | |
| 5 | |
| 6 from cStringIO import StringIO | |
| 7 import os, re | |
| 8 from twisted.python import text | |
| 9 from twisted.web import domhelpers | |
| 10 import latex, tree | |
| 11 | |
| 12 spaceRe = re.compile('\s+') | |
| 13 | |
| 14 def texiEscape(text): | |
| 15 return spaceRe.sub(text, ' ') | |
| 16 | |
| 17 entities = latex.entities.copy() | |
| 18 entities['copy'] = '@copyright{}' | |
| 19 | |
| 20 class TexiSpitter(latex.BaseLatexSpitter): | |
| 21 | |
| 22 baseLevel = 1 | |
| 23 | |
| 24 def writeNodeData(self, node): | |
| 25 buf = StringIO() | |
| 26 latex.getLatexText(node, self.writer, texiEscape, entities) | |
| 27 | |
| 28 def visitNode_title(self, node): | |
| 29 self.writer('@node ') | |
| 30 self.visitNodeDefault(node) | |
| 31 self.writer('\n') | |
| 32 self.writer('@section ') | |
| 33 self.visitNodeDefault(node) | |
| 34 self.writer('\n') | |
| 35 headers = tree.getHeaders(domhelpers.getParents(node)[-1]) | |
| 36 if not headers: | |
| 37 return | |
| 38 self.writer('@menu\n') | |
| 39 for header in headers: | |
| 40 self.writer('* %s::\n' % domhelpers.getNodeText(header)) | |
| 41 self.writer('@end menu\n') | |
| 42 | |
| 43 def visitNode_pre(self, node): | |
| 44 self.writer('@verbatim\n') | |
| 45 buf = StringIO() | |
| 46 latex.getLatexText(node, buf.write, entities=entities) | |
| 47 self.writer(text.removeLeadingTrailingBlanks(buf.getvalue())) | |
| 48 self.writer('@end verbatim\n') | |
| 49 | |
| 50 def visitNode_code(self, node): | |
| 51 fout = StringIO() | |
| 52 latex.getLatexText(node, fout.write, texiEscape, entities) | |
| 53 self.writer('@code{'+fout.getvalue()+'}') | |
| 54 | |
| 55 def visitNodeHeader(self, node): | |
| 56 self.writer('\n\n@node ') | |
| 57 self.visitNodeDefault(node) | |
| 58 self.writer('\n') | |
| 59 level = (int(node.tagName[1])-2)+self.baseLevel | |
| 60 self.writer('\n\n@'+level*'sub'+'section ') | |
| 61 self.visitNodeDefault(node) | |
| 62 self.writer('\n') | |
| 63 | |
| 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 | |
| 70 | |
| 71 def visitNode_a_href(self, node): | |
| 72 self.visitNodeDefault(node) | |
| 73 | |
| 74 def visitNode_a_name(self, node): | |
| 75 self.visitNodeDefault(node) | |
| 76 | |
| 77 visitNode_h2 = visitNode_h3 = visitNode_h4 = visitNodeHeader | |
| 78 | |
| 79 start_dl = '@itemize\n' | |
| 80 end_dl = '@end itemize\n' | |
| 81 start_ul = '@itemize\n' | |
| 82 end_ul = '@end itemize\n' | |
| 83 | |
| 84 start_ol = '@enumerate\n' | |
| 85 end_ol = '@end enumerate\n' | |
| 86 | |
| 87 start_li = '@item\n' | |
| 88 end_li = '\n' | |
| 89 | |
| 90 start_dt = '@item\n' | |
| 91 end_dt = ': ' | |
| 92 end_dd = '\n' | |
| 93 | |
| 94 start_p = '\n\n' | |
| 95 | |
| 96 start_strong = start_em = '@emph{' | |
| 97 end_strong = end_em = '}' | |
| 98 | |
| 99 start_q = "``" | |
| 100 end_q = "''" | |
| 101 | |
| 102 start_span_footnote = '@footnote{' | |
| 103 end_span_footnote = '}' | |
| 104 | |
| 105 start_div_note = '@quotation\n@strong{Note:}' | |
| 106 end_div_note = '@end quotation\n' | |
| 107 | |
| 108 start_th = '@strong{' | |
| 109 end_th = '}' | |
| OLD | NEW |