1 from docutils
import nodes
5 class InfoTranslator(nodes
.NodeVisitor
):
7 document_start
= """\\input texinfo @c -*-texinfo-*-
10 def __init__(self
, document
):
11 nodes
.NodeVisitor
.__init
__(self
, document
)
12 self
.settings
= document
.settings
15 self
.section_level
= 0
16 self
.system_message_level
= 0
20 return '\n'.join(self
.header
+ self
.body
+ [''])
22 def visit_document(self
, node
):
23 self
.header
.append(self
.document_start
)
25 def depart_document(self
, node
):
28 def visit_comment(self
, node
):
29 self
.body
.append('@c %s' % node
.astext())
32 def visit_section(self
, node
):
33 self
.section_level
+= 1
34 #self.body.append('@c +s %d' % self.section_level)
36 def depart_section(self
, node
):
37 self
.section_level
-= 1
38 #self.body.append('@c -s %d' % self.section_level)
40 def emit_title(self
, text
):
41 self
.body
.append('@node Top')
42 self
.body
.append('@top %s' % text
)
44 def emit_chapter(self
, text
):
45 self
.body
.append('@chapter %s' % text
)
47 def emit_section(self
, text
):
48 self
.body
.append('@section %s' % text
)
50 def emit_subsection(self
, text
):
51 self
.body
.append('@subsection %s' % text
)
53 def visit_title(self
, node
):
54 title_functions
= [self
.emit_title
, self
.emit_chapter
, self
.emit_section
, self
.emit_subsection
]
56 f
= title_functions
[self
.section_level
]
57 except exceptions
.IndexError:
58 f
= self
.emit_subsection
59 #self.body.append('@c section_level %d' % self.section_level)
63 def visit_subtitle(self
, node
):
64 self
.body
.append('@majorheading %s' % node
.astext())
67 def visit_paragraph(self
, node
):
70 def depart_paragraph(self
, node
):
71 if self
.system_message_level
== 0:
74 def visit_bullet_list(self
, node
):
75 self
.body
.append('@itemize @bullet')
77 def depart_bullet_list(self
, node
):
78 self
.body
.append('@end @itemize')
81 def visit_enumerated_list(self
, node
):
83 if node
.has_key('start'):
85 if node
.has_key('enumtype'):
86 if node
['enumtype'] == 'upperalpha':
87 start
=string
.ascii_uppercase
[start
-1]
88 if node
['enumtype'] == 'loweralpha':
89 start
=string
.ascii_lowercase
[start
-1]
90 self
.body
.append('@enumerate %s' % start
)
92 def depart_enumerated_list(self
, node
):
93 self
.body
.append('@end enumerate')
96 def visit_list_item(self
, node
):
97 self
.body
.append('@item')
99 def depart_list_item(self
, node
):
102 def visit_literal(self
, node
):
105 def visit_literal_block(self
, node
):
106 self
.body
.append(node
.astext())
109 def visit_block_quote(self
, node
):
110 self
.body
.append('@quotation')
112 def depart_block_quote(self
, node
):
113 self
.body
.append('@end quotation')
116 def visit_system_message(self
, node
):
118 if node
['level'] < self
.settings
.report_level
:
122 if node
.hasattr('id'):
123 attr
['name'] = node
['id']
124 if node
.hasattr('line'):
125 line
= ', line %s' % node
['line']
128 self
.body
.append('@c System Message: %s/%s (%s:%s)'
129 % (node
['type'], node
['level'], node
['source'], line
))
130 self
.system_message_level
+= 1
132 def depart_system_message(self
, node
):
133 self
.system_message_level
-= 1
134 self
.body
.append('@c --end system message--')
136 def visit_definition_list(self
, node
):
139 def depart_definition_list(self
, node
):
142 def visit_definition_list_item(self
, node
):
145 def depart_definition_list_item(self
, node
):
148 def visit_term(self
, node
):
151 def depart_term(self
, node
):
154 def visit_definition(self
, node
):
155 self
.body
.append('@quotation')
157 def depart_definition(self
, node
):
158 self
.body
.append('@end quotation')
161 def visit_Text(self
, node
):
162 if self
.system_message_level
> 0:
163 self
.body
.append('@c %s' % node
.astext())
165 self
.body
.append(node
.astext())
167 def depart_Text(self
, node
):