1 from docutils
import nodes
4 class InfoTranslator(nodes
.NodeVisitor
):
6 document_start
= """\\input texinfo @c -*-texinfo-*-
9 def __init__(self
, document
):
10 nodes
.NodeVisitor
.__init
__(self
, document
)
11 self
.settings
= document
.settings
14 self
.section_level
= 0
15 self
.system_message_level
= 0
19 return '\n'.join(self
.header
+ self
.body
+ [''])
21 def visit_document(self
, node
):
22 self
.header
.append(self
.document_start
)
24 def depart_document(self
, node
):
27 def visit_comment(self
, node
):
28 self
.body
.append('@c %s' % node
.astext())
31 def visit_section(self
, node
):
32 self
.section_level
+= 1
33 #self.body.append('@c +s %d' % self.section_level)
35 def depart_section(self
, node
):
36 self
.section_level
-= 1
37 #self.body.append('@c -s %d' % self.section_level)
39 def emit_title(self
, text
):
40 self
.body
.append('@node Top')
41 self
.body
.append('@top %s' % text
)
43 def emit_chapter(self
, text
):
44 self
.body
.append('@chapter %s' % text
)
46 def emit_section(self
, text
):
47 self
.body
.append('@section %s' % text
)
49 def emit_subsection(self
, text
):
50 self
.body
.append('@subsection %s' % text
)
52 def visit_title(self
, node
):
53 title_functions
= [self
.emit_title
, self
.emit_chapter
, self
.emit_section
, self
.emit_subsection
]
55 f
= title_functions
[self
.section_level
]
56 except exceptions
.IndexError:
57 f
= self
.emit_subsection
58 #self.body.append('@c section_level %d' % self.section_level)
62 def visit_subtitle(self
, node
):
63 self
.body
.append('@majorheading %s' % node
.astext())
66 def visit_paragraph(self
, node
):
67 if self
.system_message_level
> 0:
68 self
.body
.append('@c %s' % node
.astext())
70 self
.body
.append(node
.astext())
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')
80 def visit_enumerated_list(self
, node
):
81 self
.body
.append('@enumerate')
83 def depart_enumerated_list(self
, node
):
84 self
.body
.append('@end enumerate')
86 def visit_list_item(self
, node
):
87 self
.body
.append('@item')
89 def depart_list_item(self
, node
):
92 def visit_literal(self
, node
):
95 def visit_literal_block(self
, node
):
96 self
.body
.append(node
.astext())
99 def visit_block_quote(self
, node
):
100 self
.body
.append('@quotation')
102 def depart_block_quote(self
, node
):
103 self
.body
.append('@end quotation')
105 def visit_system_message(self
, node
):
107 print "node['level']=%s, self.settings.report_level=%s" % (node
['level'], self
.settings
.report_level
)
108 if node
['level'] < self
.settings
.report_level
: #self.document.reporter['writer'].report_level:
109 # Level is too low to display:
113 if node
.hasattr('id'):
114 attr
['name'] = node
['id']
115 if node
.hasattr('line'):
116 line
= ', line %s' % node
['line']
119 self
.body
.append('@c System Message: %s/%s (%s:%s)'
120 % (node
['type'], node
['level'], node
['source'], line
))
121 self
.system_message_level
+= 1
123 def depart_system_message(self
, node
):
124 self
.system_message_level
-= 1
125 self
.body
.append('@c --end system message--')