Initial import to Tizen
[profile/ivi/python-twisted.git] / twisted / lore / texi.py
1 # Copyright (c) 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 = '}'