##// 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
@@ -4,7 +4,7 b' This module defines Exporter, a highly configurable converter'
4 4 that uses Jinja2 to export notebook files into different format.
5 5
6 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 83 '', config=True,
84 84 help="Name of the template file to use")
85 85
86 fileext = Unicode(
86 file_extension = Unicode(
87 87 'txt', config=True,
88 88 help="Extension of the file that should be written to disk"
89 89 )
@@ -142,11 +142,8 b' class Exporter(Configurable):'
142 142 # transformer = transformer(config=config)
143 143 # self.preprocessors.append(transformer)
144 144
145 #For compatibility, TODO: remove later.
146 self.preprocessors.append(transformers.coalescestreams.coalesce_streams)
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))
145 #Add transformers
146 self._register_transformers()
150 147
151 148 #Add filters to the Jinja2 environment
152 149 self._register_filters()
@@ -155,12 +152,12 b' class Exporter(Configurable):'
155 152 if not jinja_filters is None:
156 153 for key, user_filter in jinja_filters.iteritems():
157 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 156 else:
160 self.env.filters[key] = user_filter
157 self.environment.filters[key] = user_filter
161 158
162 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 163 def from_notebook_node(self, nb):
@@ -203,13 +200,27 b' class Exporter(Configurable):'
203 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 210 def register_filter(self, name, filter):
207 211 if MetaHasTraits(filter):
208 self.env.filters[name] = filter(config=self.config)
212 self.environment.filters[name] = filter(config=self.config)
209 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 224 def _register_filters(self):
214 225 self.register_filter('indent', indent)
215 226 self.register_filter('markdown', markdown)
@@ -230,7 +241,7 b' class Exporter(Configurable):'
230 241
231 242
232 243 def _init_environment(self):
233 self.env = Environment(
244 self.environment = Environment(
234 245 loader=FileSystemLoader([
235 246 os.path.dirname(os.path.realpath(__file__)) + TEMPLATE_PATH,
236 247 os.path.dirname(os.path.realpath(__file__)) + TEMPLATE_SKELETON_PATH,
@@ -33,17 +33,11 b' from IPython.utils.text import indent'
33 33 from jinja2 import Environment, FileSystemLoader
34 34 from markdown import markdown
35 35
36 import base.Exporter as Exporter
36 # local import
37 import exporter
37 38 import filters.latex
38 39 import filters.pygments
39
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
40 from transformers.latex import LatexTransformer
47 41 #-----------------------------------------------------------------------------
48 42 # Globals and constants
49 43 #-----------------------------------------------------------------------------
@@ -61,19 +55,15 b' LATEX_JINJA_LOGIC_BLOCK = ["((*", "*))"]'
61 55 #-----------------------------------------------------------------------------
62 56 # Classes and functions
63 57 #-----------------------------------------------------------------------------
64 class LatexExporter(Exporter):
65 """ A Jinja2 base converter templates
58 class LatexExporter(exporter.Exporter):
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 62 and spit an converted files and a data object with other data
69 63 should be mostly configurable
70 64 """
71 65
72 #Processors that process the input data prior to the export, set in the
73 #constructor for this class.
74 preprocessors = []
75
76 def __init__(self, preprocessors={}, jinja_filters={}, config=None, export_format, **kw):
66 def __init__(self, preprocessors=None, jinja_filters=None, config=None, **kw):
77 67 """ Init a new converter.
78 68
79 69 config: the Configurable config object to pass around.
@@ -96,45 +86,42 b' class LatexExporter(Exporter):'
96 86 """
97 87
98 88 #Call the base class constructor
99 super(Exporter, self).__init__(config=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)
89 super(exporter.Exporter, self).__init__(preprocessors, jinja_filters, config, **kw)
122 90
123 91
124 92 def _init_environment(self):
125 93 self.ext = LATEX_TEMPLATE_EXTENSION
126 self.env = Environment(
94 self.environment = Environment(
127 95 loader=FileSystemLoader([
128 96 os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_PATH,
129 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 102 #Set special Jinja2 syntax that will not conflict with latex.
135 self.env.block_start_string = LATEX_JINJA_LOGIC_BLOCK[0]
136 self.env.block_end_string = LATEX_JINJA_LOGIC_BLOCK[1]
137 self.env.variable_start_string = LATEX_JINJA_VARIABLE_BLOCK[0]
138 self.env.variable_end_string = LATEX_JINJA_VARIABLE_BLOCK[1]
139 self.env.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
103 self.environment.block_start_string = LATEX_JINJA_LOGIC_BLOCK[0]
104 self.environment.block_end_string = LATEX_JINJA_LOGIC_BLOCK[1]
105 self.environment.variable_start_string = LATEX_JINJA_VARIABLE_BLOCK[0]
106 self.environment.variable_end_string = LATEX_JINJA_VARIABLE_BLOCK[1]
107 self.environment.comment_start_string = LATEX_JINJA_COMMENT_BLOCK[0]
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