##// END OF EJS Templates
More clean-up. Nomenclature changes
Jonathan Frederic -
Show More
@@ -104,7 +104,7 b' class Exporter(Configurable):'
104 #constructor for this class.
104 #constructor for this class.
105 preprocessors = []
105 preprocessors = []
106
106
107 def __init__(self, preprocessors={}, jinja_filters={}, config=None, export_format, **kw):
107 def __init__(self, preprocessors=None, jinja_filters=None, config=None, export_format, **kw):
108 """ Init a new converter.
108 """ Init a new converter.
109
109
110 config: the Configurable config object to pass around.
110 config: the Configurable config object to pass around.
@@ -150,13 +150,14 b' class Exporter(Configurable):'
150 self.ext = TEMPLATE_EXTENSION
150 self.ext = TEMPLATE_EXTENSION
151 self._init_environment()
151 self._init_environment()
152
152
153 #TODO: Implement reflection style methods to get user transformers.
153 #TODO: Implement reflection style methods to get user transformers.
154 #for name in self.pre_transformer_order:
154 #if not preprocessors is None:
155 # # get the user-defined transformer first
155 # for name in self.pre_transformer_order:
156 # transformer = preprocessors.get(name, getattr(trans, name, None))
156 # # get the user-defined transformer first
157 # if isinstance(transformer, MetaHasTraits):
157 # transformer = preprocessors.get(name, getattr(trans, name, None))
158 # transformer = transformer(config=config)
158 # if isinstance(transformer, MetaHasTraits):
159 # self.preprocessors.append(transformer)
159 # transformer = transformer(config=config)
160 # self.preprocessors.append(transformer)
160
161
161 #For compatibility, TODO: remove later.
162 #For compatibility, TODO: remove later.
162 self.preprocessors.append(transformers.coalescestreams.coalesce_streams)
163 self.preprocessors.append(transformers.coalescestreams.coalesce_streams)
@@ -165,23 +166,24 b' class Exporter(Configurable):'
165 self.preprocessors.append(transformers.csshtmlheader.CSSHtmlHeaderTransformer(config=config))
166 self.preprocessors.append(transformers.csshtmlheader.CSSHtmlHeaderTransformer(config=config))
166
167
167 #Add filters to the Jinja2 environment
168 #Add filters to the Jinja2 environment
168 self._register_filters(config)
169 self._register_filters()
169
170
170 #Load user filters. Overwrite existing filters if need be.
171 #Load user filters. Overwrite existing filters if need be.
171 for key, user_filter in jinja_filters.iteritems():
172 if not jinja_filters is None:
172 if isinstance(user_filter, MetaHasTraits):
173 for key, user_filter in jinja_filters.iteritems():
173 self.env.filters[key] = user_filter(config=config)
174 if isinstance(user_filter, MetaHasTraits):
174 else:
175 self.env.filters[key] = user_filter(config=config)
175 self.env.filters[key] = user_filter
176 else:
177 self.env.filters[key] = user_filter
176
178
177 #Load the template file.
179 #Load the template file.
178 self.template = self.env.get_template(self.template_file+self.ext)
180 self.template = self.env.get_template(self.template_file+self.ext)
179
181
180
182
181 def export(self, nb):
183 def from_notebook_node(self, nb):
182 """Export notebook object
184 """Export NotebookNode instance
183
185
184 nb: Notebook object to export.
186 nb: NotebookNode to export.
185
187
186 Returns both the converted ipynb file and a dict containing the
188 Returns both the converted ipynb file and a dict containing the
187 resources created along the way via the transformers and Jinja2
189 resources created along the way via the transformers and Jinja2
@@ -202,11 +204,11 b' class Exporter(Configurable):'
202 processing.
204 processing.
203 """
205 """
204 with io.open(filename) as f:
206 with io.open(filename) as f:
205 return self.export(nbformat.read(f, 'json'))
207 return self.from_notebook_node(nbformat.read(f, 'json'))
206
208
207
209
208 def from_file(self, file_stream):
210 def from_file(self, file_stream):
209 """Read and export a notebook from a filename
211 """Read and export a notebook from a file stream
210
212
211 file_stream: File handle of file that contains notebook data.
213 file_stream: File handle of file that contains notebook data.
212
214
@@ -215,9 +217,35 b' class Exporter(Configurable):'
215 processing.
217 processing.
216 """
218 """
217
219
218 return self.export(nbformat.read(file_stream, 'json'))
220 return self.from_notebook_node(nbformat.read(file_stream, 'json'))
219
221
222
223 def register_filter(self, name, filter):
224 if MetaHasTraits(filter):
225 self.env.filters[name] = filter(config=self.config)
226 else:
227 self.env.filters[name] = filter
228
229
230 def _register_filters(self):
231 self.register_filter('indent', indent)
232 self.register_filter('markdown', markdown)
233 self.register_filter('ansi2html', filters.ansi.ansi2html)
234 self.register_filter('filter_data_type', filters.datatypefilter.DataTypeFilter)
235 self.register_filter('get_lines', filters.strings.get_lines)
236 self.register_filter('highlight', filters.pygments.highlight)
237 self.register_filter('highlight2html', filters.pygments.highlight)
238 self.register_filter('highlight2latex', filters.pygments.highlight2latex)
239 self.register_filter('markdown2latex', filters.markdown.markdown2latex)
240 self.register_filter('markdown2rst', filters.markdown.markdown2rst)
241 self.register_filter('pycomment', filters.strings.python_comment)
242 self.register_filter('rm_ansi', filters.ansi.remove_ansi)
243 self.register_filter('rm_dollars', filters.strings.strip_dollars)
244 self.register_filter('rm_fake', filters.strings.rm_fake)
245 self.register_filter('rm_math_space', filters.latex.rm_math_space)
246 self.register_filter('wrap', filters.strings.wrap)
220
247
248
221 def _init_environment(self):
249 def _init_environment(self):
222 self.env = Environment(
250 self.env = Environment(
223 loader=FileSystemLoader([
251 loader=FileSystemLoader([
@@ -228,26 +256,6 b' class Exporter(Configurable):'
228 )
256 )
229
257
230
258
231 def _register_filters(self, config):
232 self.env.filters['indent'] = indent
233 self.env.filters['markdown'] = markdown
234
235 self.env.filters['ansi2html'] = filters.ansi.ansi2html
236 self.env.filters['filter_data_type'] = filters.datatypefilter.DataTypeFilter(config=config)
237 self.env.filters['get_lines'] = filters.strings.get_lines
238 self.env.filters['highlight'] = filters.pygments.highlight
239 self.env.filters['highlight2html'] = filters.pygments.highlight
240 self.env.filters['highlight2latex'] = filters.pygments.highlight2latex
241 self.env.filters['markdown2latex'] = filters.markdown.markdown2latex
242 self.env.filters['markdown2rst'] = filters.markdown.markdown2rst
243 self.env.filters['pycomment'] = filters.strings.python_comment
244 self.env.filters['rm_ansi'] = filters.ansi.remove_ansi
245 self.env.filters['rm_dollars'] = filters.strings.strip_dollars
246 self.env.filters['rm_fake'] = filters.strings.rm_fake
247 self.env.filters['rm_math_space'] = filters.latex.rm_math_space
248 self.env.filters['wrap'] = filters.strings.wrap
249
250
251 def _preprocess(self, nb):
259 def _preprocess(self, nb):
252 """ Preprocess the notebook using the transformers specific
260 """ Preprocess the notebook using the transformers specific
253 for the current export format.
261 for the current export format.
@@ -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 #-----------------------------------------------------------------------------
@@ -61,7 +61,7 b' class LatexExporter(Exporter):'
61
61
62 config: the Configurable config object to pass around.
62 config: the Configurable config object to pass around.
63
63
64 preprocessors: dict of **availlable** key/value function to run on
64 preprocessors: dict of **available** key/value function to run on
65 ipynb json data before conversion to extract/inline file.
65 ipynb json data before conversion to extract/inline file.
66 See `transformer.py` and `ConfigurableTransformers`
66 See `transformer.py` and `ConfigurableTransformers`
67
67
@@ -72,57 +72,15 b' class LatexExporter(Exporter):'
72 default one.
72 default one.
73
73
74 jinja_filters: dict of supplementary jinja filter that should be made
74 jinja_filters: dict of supplementary jinja filter that should be made
75 availlable in template. If those are of Configurable Class type,
75 available in template. If those are of Configurable Class type,
76 they will be instanciated with the config object as argument.
76 they will be instanciated with the config object as argument.
77
77
78 user defined filter will overwrite the one availlable by default.
78 user defined filter will overwrite the one available by default.
79 """
79 """
80
80
81 #Merge default config options with user specific override options.
82 default_config = self._get_default_options()
83 if not config == None:
84 default_config._merge(config)
85 config = default_config
86
87 #Call the base class constructor
81 #Call the base class constructor
88 super(Exporter, self).__init__(config=config, **kw)
82 super(Exporter, self).__init__(config=config, **kw)
89
83
90 #Create a Latex environment if the user is exporting latex.
91 if self.tex_environement:
92 self.ext = LATEX_TEMPLATE_EXTENSION
93 self.env = Environment(
94 loader=FileSystemLoader([
95 os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_PATH,
96 os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_SKELETON_PATH,
97 ]),
98 extensions=JINJA_EXTENSIONS
99 )
100
101 #Set special Jinja2 syntax that will not conflict with latex.
102 self.env.block_start_string = LATEX_JINJA_LOGIC_BLOCK[0]
103 self.env.block_end_string = LATEX_JINJA_LOGIC_BLOCK[1]
104 self.env.variable_start_string = LATEX_JINJA_VARIABLE_BLOCK[0]
105 self.env.variable_end_string = LATEX_JINJA_VARIABLE_BLOCK[1]
106 self.env.comment_start_string = LATEX_JINJA_COMMENT_BLOCK[0]
107 self.env.comment_end_string = LATEX_JINJA_COMMENT_BLOCK[1]
108
109 else: #Standard environment
110 self.ext = TEMPLATE_EXTENSION
111 self.env = Environment(
112 loader=FileSystemLoader([
113 os.path.dirname(os.path.realpath(__file__)) + TEMPLATE_PATH,
114 os.path.dirname(os.path.realpath(__file__)) + TEMPLATE_SKELETON_PATH,
115 ]),
116 extensions=JINJA_EXTENSIONS
117 )
118
119 for name in self.pre_transformer_order:
120 # get the user-defined transformer first
121 transformer = preprocessors.get(name, getattr(trans, name, None))
122 if isinstance(transformer, MetaHasTraits):
123 transformer = transformer(config=config)
124 self.preprocessors.append(transformer)
125
126 #For compatibility, TODO: remove later.
84 #For compatibility, TODO: remove later.
127 self.preprocessors.append(trans.coalesce_streams)
85 self.preprocessors.append(trans.coalesce_streams)
128 self.preprocessors.append(trans.ExtractFigureTransformer(config=config))
86 self.preprocessors.append(trans.ExtractFigureTransformer(config=config))
@@ -148,3 +106,22 b' class LatexExporter(Exporter):'
148
106
149 #Load the template file.
107 #Load the template file.
150 self.template = self.env.get_template(self.template_file+self.ext)
108 self.template = self.env.get_template(self.template_file+self.ext)
109
110
111 def _init_environment(self):
112 self.ext = LATEX_TEMPLATE_EXTENSION
113 self.env = Environment(
114 loader=FileSystemLoader([
115 os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_PATH,
116 os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_SKELETON_PATH,
117 ]),
118 extensions=JINJA_EXTENSIONS
119 )
120
121 #Set special Jinja2 syntax that will not conflict with latex.
122 self.env.block_start_string = LATEX_JINJA_LOGIC_BLOCK[0]
123 self.env.block_end_string = LATEX_JINJA_LOGIC_BLOCK[1]
124 self.env.variable_start_string = LATEX_JINJA_VARIABLE_BLOCK[0]
125 self.env.variable_end_string = LATEX_JINJA_VARIABLE_BLOCK[1]
126 self.env.comment_start_string = LATEX_JINJA_COMMENT_BLOCK[0]
127 self.env.comment_end_string = LATEX_JINJA_COMMENT_BLOCK[1] No newline at end of file
General Comments 0
You need to be logged in to leave comments. Login now