##// END OF EJS Templates
Added latexexporter
Jonathan Frederic -
Show More
1 NO CONTENT: file renamed from nbconvert/api/converter.py to nbconvert/api/convert.py
NO CONTENT: file renamed from nbconvert/api/converter.py to nbconvert/api/convert.py
@@ -4,7 +4,7 b' This module defines Exporter, a highly configurable converter'
4 that uses Jinja2 to export notebook files into different format.
4 that uses Jinja2 to export notebook files into different format.
5
5
6 You can register both pre-transformers that will act on the notebook format
6 You can register both pre-transformers that will act on the notebook format
7 befor conversion and jinja filter that would then be availlable in the templates
7 before conversion and jinja filter that would then be available in the templates
8 """
8 """
9
9
10 #-----------------------------------------------------------------------------
10 #-----------------------------------------------------------------------------
@@ -83,7 +83,7 b' class Exporter(Configurable):'
83 '', config=True,
83 '', config=True,
84 help="Name of the template file to use")
84 help="Name of the template file to use")
85
85
86 fileext = Unicode(
86 file_extension = Unicode(
87 'txt', config=True,
87 'txt', config=True,
88 help="Extension of the file that should be written to disk"
88 help="Extension of the file that should be written to disk"
89 )
89 )
@@ -142,11 +142,8 b' class Exporter(Configurable):'
142 # transformer = transformer(config=config)
142 # transformer = transformer(config=config)
143 # self.preprocessors.append(transformer)
143 # self.preprocessors.append(transformer)
144
144
145 #For compatibility, TODO: remove later.
145 #Add transformers
146 self.preprocessors.append(transformers.coalescestreams.coalesce_streams)
146 self._register_transformers()
147 self.preprocessors.append(transformers.extractfigure.ExtractFigureTransformer(config=config))
148 self.preprocessors.append(transformers.revealhelp.RevealHelpTransformer(config=config))
149 self.preprocessors.append(transformers.csshtmlheader.CSSHtmlHeaderTransformer(config=config))
150
147
151 #Add filters to the Jinja2 environment
148 #Add filters to the Jinja2 environment
152 self._register_filters()
149 self._register_filters()
@@ -155,12 +152,12 b' class Exporter(Configurable):'
155 if not jinja_filters is None:
152 if not jinja_filters is None:
156 for key, user_filter in jinja_filters.iteritems():
153 for key, user_filter in jinja_filters.iteritems():
157 if isinstance(user_filter, MetaHasTraits):
154 if isinstance(user_filter, MetaHasTraits):
158 self.env.filters[key] = user_filter(config=config)
155 self.environment.filters[key] = user_filter(config=config)
159 else:
156 else:
160 self.env.filters[key] = user_filter
157 self.environment.filters[key] = user_filter
161
158
162 #Load the template file.
159 #Load the template file.
163 self.template = self.env.get_template(self.template_file+self.ext)
160 self.template = self.environment.get_template(self.template_file+self.ext)
164
161
165
162
166 def from_notebook_node(self, nb):
163 def from_notebook_node(self, nb):
@@ -203,13 +200,27 b' class Exporter(Configurable):'
203 return self.from_notebook_node(nbformat.read(file_stream, 'json'))
200 return self.from_notebook_node(nbformat.read(file_stream, 'json'))
204
201
205
202
203 def register_transformer(self, transformer):
204 if MetaHasTraits(transformer):
205 self.preprocessors.append(transformer(config=self.config))
206 else:
207 self.preprocessors.append(transformer)
208
209
206 def register_filter(self, name, filter):
210 def register_filter(self, name, filter):
207 if MetaHasTraits(filter):
211 if MetaHasTraits(filter):
208 self.env.filters[name] = filter(config=self.config)
212 self.environment.filters[name] = filter(config=self.config)
209 else:
213 else:
210 self.env.filters[name] = filter
214 self.environment.filters[name] = filter
211
215
212
216
217 def _register_transformers(self):
218 self.register_transformer(transformers.coalescestreams.coalesce_streams)
219 self.register_transformer(transformers.extractfigure.ExtractFigureTransformer)
220 self.register_transformer(transformers.revealhelp.RevealHelpTransformer)
221 self.register_transformer(transformers.csshtmlheader.CSSHtmlHeaderTransformer)
222
223
213 def _register_filters(self):
224 def _register_filters(self):
214 self.register_filter('indent', indent)
225 self.register_filter('indent', indent)
215 self.register_filter('markdown', markdown)
226 self.register_filter('markdown', markdown)
@@ -230,7 +241,7 b' class Exporter(Configurable):'
230
241
231
242
232 def _init_environment(self):
243 def _init_environment(self):
233 self.env = Environment(
244 self.environment = Environment(
234 loader=FileSystemLoader([
245 loader=FileSystemLoader([
235 os.path.dirname(os.path.realpath(__file__)) + TEMPLATE_PATH,
246 os.path.dirname(os.path.realpath(__file__)) + TEMPLATE_PATH,
236 os.path.dirname(os.path.realpath(__file__)) + TEMPLATE_SKELETON_PATH,
247 os.path.dirname(os.path.realpath(__file__)) + TEMPLATE_SKELETON_PATH,
@@ -33,17 +33,11 b' from IPython.utils.text import indent'
33 from jinja2 import Environment, FileSystemLoader
33 from jinja2 import Environment, FileSystemLoader
34 from markdown import markdown
34 from markdown import markdown
35
35
36 import base.Exporter as Exporter
36 # local import
37 import exporter
37 import filters.latex
38 import filters.latex
38 import filters.pygments
39 import filters.pygments
39
40 from transformers.latex import LatexTransformer
40 #Try to import the Sphinx exporter. If the user doesn't have Sphinx isntalled
41 #on his/her machine, fail silently.
42 try:
43 from .sphinx_transformer import (SphinxTransformer) #TODO
44 except ImportError:
45 SphinxTransformer = None
46
47 #-----------------------------------------------------------------------------
41 #-----------------------------------------------------------------------------
48 # Globals and constants
42 # Globals and constants
49 #-----------------------------------------------------------------------------
43 #-----------------------------------------------------------------------------
@@ -61,19 +55,15 b' LATEX_JINJA_LOGIC_BLOCK = ["((*", "*))"]'
61 #-----------------------------------------------------------------------------
55 #-----------------------------------------------------------------------------
62 # Classes and functions
56 # Classes and functions
63 #-----------------------------------------------------------------------------
57 #-----------------------------------------------------------------------------
64 class LatexExporter(Exporter):
58 class LatexExporter(exporter.Exporter):
65 """ A Jinja2 base converter templates
59 """ A Jinja2 latex exporter
66
60
67 Preprocess the ipynb files, feed it throug jinja templates,
61 Preprocess the ipynb files, feed it through jinja templates,
68 and spit an converted files and a data object with other data
62 and spit an converted files and a data object with other data
69 should be mostly configurable
63 should be mostly configurable
70 """
64 """
71
65
72 #Processors that process the input data prior to the export, set in the
66 def __init__(self, preprocessors=None, jinja_filters=None, config=None, **kw):
73 #constructor for this class.
74 preprocessors = []
75
76 def __init__(self, preprocessors={}, jinja_filters={}, config=None, export_format, **kw):
77 """ Init a new converter.
67 """ Init a new converter.
78
68
79 config: the Configurable config object to pass around.
69 config: the Configurable config object to pass around.
@@ -96,45 +86,42 b' class LatexExporter(Exporter):'
96 """
86 """
97
87
98 #Call the base class constructor
88 #Call the base class constructor
99 super(Exporter, self).__init__(config=config, **kw)
89 super(exporter.Exporter, self).__init__(preprocessors, jinja_filters, config, **kw)
100
101 #For compatibility, TODO: remove later.
102 self.preprocessors.append(LatexTransformer(config=config))
103
104 #Only load the sphinx transformer if the file reference worked
105 #(Sphinx dependencies exist on the user's machine.)
106 if SphinxTransformer:
107 self.preprocessors.append(SphinxTransformer(config=config))
108
109 #Add filters to the Jinja2 environment
110 self.register_filter('escape_tex', filters.latex.escape_tex)
111 self.register_filter('highlight', filters.pygments.highlight2latex)
112
113 #Load user filters. Overwrite existing filters if need be.
114 for key, user_filter in jinja_filters.iteritems():
115 if isinstance(user_filter, MetaHasTraits):
116 self.env.filters[key] = user_filter(config=config)
117 else:
118 self.env.filters[key] = user_filter
119
120 #Load the template file.
121 self.template = self.env.get_template(self.template_file+self.ext)
122
90
123
91
124 def _init_environment(self):
92 def _init_environment(self):
125 self.ext = LATEX_TEMPLATE_EXTENSION
93 self.ext = LATEX_TEMPLATE_EXTENSION
126 self.env = Environment(
94 self.environment = Environment(
127 loader=FileSystemLoader([
95 loader=FileSystemLoader([
128 os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_PATH,
96 os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_PATH,
129 os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_SKELETON_PATH,
97 os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_SKELETON_PATH,
130 ]),
98 ]),
131 extensions=JINJA_EXTENSIONS
99 extensions=exporter.JINJA_EXTENSIONS
132 )
100 )
133
101
134 #Set special Jinja2 syntax that will not conflict with latex.
102 #Set special Jinja2 syntax that will not conflict with latex.
135 self.env.block_start_string = LATEX_JINJA_LOGIC_BLOCK[0]
103 self.environment.block_start_string = LATEX_JINJA_LOGIC_BLOCK[0]
136 self.env.block_end_string = LATEX_JINJA_LOGIC_BLOCK[1]
104 self.environment.block_end_string = LATEX_JINJA_LOGIC_BLOCK[1]
137 self.env.variable_start_string = LATEX_JINJA_VARIABLE_BLOCK[0]
105 self.environment.variable_start_string = LATEX_JINJA_VARIABLE_BLOCK[0]
138 self.env.variable_end_string = LATEX_JINJA_VARIABLE_BLOCK[1]
106 self.environment.variable_end_string = LATEX_JINJA_VARIABLE_BLOCK[1]
139 self.env.comment_start_string = LATEX_JINJA_COMMENT_BLOCK[0]
107 self.environment.comment_start_string = LATEX_JINJA_COMMENT_BLOCK[0]
140 self.env.comment_end_string = LATEX_JINJA_COMMENT_BLOCK[1] No newline at end of file
108 self.environment.comment_end_string = LATEX_JINJA_COMMENT_BLOCK[1]
109
110
111 def _register_filters(self):
112
113 #Register the filters of the base class.
114 super(exporter.Exporter, self)._register_filters()
115
116 #Add latex filters to the Jinja2 environment
117 self.register_filter('escape_tex', filters.latex.escape_tex)
118 self.register_filter('highlight', filters.pygments.highlight2latex)
119
120 def _register_transformers(self):
121
122 #Register the transformers of the base class.
123 super(exporter.Exporter, self)._register_transformers()
124
125 #Register latex transformer
126 self.register_transformer(LatexTransformer)
127 No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now