Show More
@@ -56,14 +56,17 b' class Converter(object):' | |||
|
56 | 56 | def dispatch(self, cell_type): |
|
57 | 57 | """return cell_type dependent render method, for example render_code |
|
58 | 58 | """ |
|
59 | # XXX: unknown_cell here is RST specific - make it generic | |
|
59 | 60 | return getattr(self, 'render_' + cell_type, unknown_cell) |
|
60 | 61 | |
|
61 | 62 | def convert(self): |
|
62 | 63 | lines = [] |
|
64 | lines.extend(self.optional_header()) | |
|
63 | 65 | for cell in self.nb.worksheets[0].cells: |
|
64 | 66 | conv_fn = self.dispatch(cell.cell_type) |
|
65 | 67 | lines.extend(conv_fn(cell)) |
|
66 | 68 | lines.append('') |
|
69 | lines.extend(self.optional_footer()) | |
|
67 | 70 | return '\n'.join(lines) |
|
68 | 71 | |
|
69 | 72 | def render(self): |
@@ -87,6 +90,12 b' class Converter(object):' | |||
|
87 | 90 | f.write(self.output.encode(encoding)) |
|
88 | 91 | return infile |
|
89 | 92 | |
|
93 | def optional_header(): | |
|
94 | pass | |
|
95 | ||
|
96 | def optional_footer(): | |
|
97 | pass | |
|
98 | ||
|
90 | 99 | def render_heading(self, cell): |
|
91 | 100 | """convert a heading cell |
|
92 | 101 | |
@@ -201,6 +210,99 b' class ConverterRST(Converter):' | |||
|
201 | 210 | |
|
202 | 211 | return lines |
|
203 | 212 | |
|
213 | class ConverterQuickHTML(Converter): | |
|
214 | extension = 'html' | |
|
215 | figures_counter = 0 | |
|
216 | ||
|
217 | def optional_header(self): | |
|
218 | # XXX: inject the IPython standard CSS into here | |
|
219 | s = """<html> | |
|
220 | <head> | |
|
221 | </head> | |
|
222 | ||
|
223 | <body> | |
|
224 | """ | |
|
225 | return s.splitlines() | |
|
226 | ||
|
227 | def optional_footer(self): | |
|
228 | s = """</body> | |
|
229 | </html> | |
|
230 | """ | |
|
231 | return s.splitlines() | |
|
232 | ||
|
233 | @DocInherit | |
|
234 | def render_heading(self, cell): | |
|
235 | marker = cell.level | |
|
236 | return ['<h{1}>\n {0}\n</h{1}>'.format(cell.source, marker)] | |
|
237 | ||
|
238 | @DocInherit | |
|
239 | def render_code(self, cell): | |
|
240 | if not cell.input: | |
|
241 | return [] | |
|
242 | ||
|
243 | lines = ['<table>'] | |
|
244 | lines.append('<tr><td><tt>In [<b>%s</b>]:</tt></td><td><tt>' % cell.prompt_number) | |
|
245 | lines.append("<br>\n".join(cell.input.splitlines())) | |
|
246 | lines.append('</tt></td></tr>') | |
|
247 | ||
|
248 | for output in cell.outputs: | |
|
249 | lines.append('<tr><td></td><td>') | |
|
250 | conv_fn = self.dispatch(output.output_type) | |
|
251 | lines.extend(conv_fn(output)) | |
|
252 | lines.append('</td></tr>') | |
|
253 | ||
|
254 | lines.append('</table>') | |
|
255 | return lines | |
|
256 | ||
|
257 | @DocInherit | |
|
258 | def render_markdown(self, cell): | |
|
259 | return ["<pre>"+cell.source+"</pre>"] | |
|
260 | ||
|
261 | @DocInherit | |
|
262 | def render_plaintext(self, cell): | |
|
263 | return ["<pre>"+cell.source+"</pre>"] | |
|
264 | ||
|
265 | @DocInherit | |
|
266 | def render_pyout(self, output): | |
|
267 | lines = ['<tr><td><tt>Out[<b>%s</b>]:</tt></td></tr>' % output.prompt_number, '<td>'] | |
|
268 | ||
|
269 | # output is a dictionary like object with type as a key | |
|
270 | if 'latex' in output: | |
|
271 | lines.append("<pre>") | |
|
272 | lines.extend(indent(output.latex)) | |
|
273 | lines.append("</pre>") | |
|
274 | ||
|
275 | if 'text' in output: | |
|
276 | lines.append("<pre>") | |
|
277 | lines.extend(indent(output.text)) | |
|
278 | lines.append("</pre>") | |
|
279 | ||
|
280 | return lines | |
|
281 | ||
|
282 | @DocInherit | |
|
283 | def render_display_data(self, output): | |
|
284 | lines = [] | |
|
285 | ||
|
286 | if 'png' in output: | |
|
287 | infile = 'nb_figure_%s.png' % self.figures_counter | |
|
288 | fullname = os.path.join(self.dirpath, infile) | |
|
289 | with open(fullname, 'w') as f: | |
|
290 | f.write(output.png.decode('base64')) | |
|
291 | ||
|
292 | self.figures_counter += 1 | |
|
293 | lines.append('<img src="%s">' % infile) | |
|
294 | lines.append('') | |
|
295 | ||
|
296 | return lines | |
|
297 | ||
|
298 | @DocInherit | |
|
299 | def render_stream(self, output): | |
|
300 | lines = [] | |
|
301 | ||
|
302 | if 'text' in output: | |
|
303 | lines.append(output.text) | |
|
304 | ||
|
305 | return lines | |
|
204 | 306 | |
|
205 | 307 | def rst2simplehtml(infile): |
|
206 | 308 | """Convert a rst file to simplified html suitable for blogger. |
@@ -261,6 +363,9 b" def main(infile, format='rst'):" | |||
|
261 | 363 | converter = ConverterRST(infile) |
|
262 | 364 | rstfname = converter.render() |
|
263 | 365 | rst2simplehtml(rstfname) |
|
366 | elif format == 'quick-html': | |
|
367 | converter = ConverterQuickHTML(infile) | |
|
368 | rstfname = converter.render() | |
|
264 | 369 | |
|
265 | 370 | |
|
266 | 371 | if __name__ == '__main__': |
General Comments 0
You need to be logged in to leave comments.
Login now