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
):
68 if self
.system_message_level
> 0:
69 self
.body
.append('@c %s' % node
.astext())
71 self
.body
.append(node
.astext())
75 def visit_bullet_list(self
, node
):
76 self
.body
.append('@itemize @bullet')
78 def depart_bullet_list(self
, node
):
79 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')
95 def visit_list_item(self
, node
):
96 self
.body
.append('@item')
98 def depart_list_item(self
, node
):
101 def visit_literal(self
, node
):
104 def visit_literal_block(self
, node
):
105 self
.body
.append(node
.astext())
108 def visit_block_quote(self
, node
):
109 self
.body
.append('@quotation')
111 def depart_block_quote(self
, node
):
112 self
.body
.append('@end quotation')
114 def visit_system_message(self
, node
):
116 if node
['level'] < self
.settings
.report_level
:
120 if node
.hasattr('id'):
121 attr
['name'] = node
['id']
122 if node
.hasattr('line'):
123 line
= ', line %s' % node
['line']
126 self
.body
.append('@c System Message: %s/%s (%s:%s)'
127 % (node
['type'], node
['level'], node
['source'], line
))
128 self
.system_message_level
+= 1
130 def depart_system_message(self
, node
):
131 self
.system_message_level
-= 1
132 self
.body
.append('@c --end system message--')