##// END OF EJS Templates
use DEFAULT_STATIC_FILES_PATH to find css files...
Julian Taylor -
Show More
@@ -1,105 +1,106 b''
1 """Module that pre-processes the notebook for export to HTML.
1 """Module that pre-processes the notebook for export to HTML.
2 """
2 """
3 #-----------------------------------------------------------------------------
3 #-----------------------------------------------------------------------------
4 # Copyright (c) 2013, the IPython Development Team.
4 # Copyright (c) 2013, the IPython Development Team.
5 #
5 #
6 # Distributed under the terms of the Modified BSD License.
6 # Distributed under the terms of the Modified BSD License.
7 #
7 #
8 # The full license is in the file COPYING.txt, distributed with this software.
8 # The full license is in the file COPYING.txt, distributed with this software.
9 #-----------------------------------------------------------------------------
9 #-----------------------------------------------------------------------------
10
10
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12 # Imports
12 # Imports
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14
14
15 import os
15 import os
16 import io
16 import io
17
17
18 from IPython.utils import path
18 from IPython.utils import path
19
19
20 from .base import Preprocessor
20 from .base import Preprocessor
21
21
22 from IPython.utils.traitlets import Unicode
22 from IPython.utils.traitlets import Unicode
23
23
24 #-----------------------------------------------------------------------------
24 #-----------------------------------------------------------------------------
25 # Classes and functions
25 # Classes and functions
26 #-----------------------------------------------------------------------------
26 #-----------------------------------------------------------------------------
27
27
28 class CSSHTMLHeaderPreprocessor(Preprocessor):
28 class CSSHTMLHeaderPreprocessor(Preprocessor):
29 """
29 """
30 Preprocessor used to pre-process notebook for HTML output. Adds IPython notebook
30 Preprocessor used to pre-process notebook for HTML output. Adds IPython notebook
31 front-end CSS and Pygments CSS to HTML output.
31 front-end CSS and Pygments CSS to HTML output.
32 """
32 """
33
33
34 header = []
34 header = []
35
35
36 highlight_class = Unicode('.highlight', config=True,
36 highlight_class = Unicode('.highlight', config=True,
37 help="CSS highlight class identifier")
37 help="CSS highlight class identifier")
38
38
39 def __init__(self, config=None, **kw):
39 def __init__(self, config=None, **kw):
40 """
40 """
41 Public constructor
41 Public constructor
42
42
43 Parameters
43 Parameters
44 ----------
44 ----------
45 config : Config
45 config : Config
46 Configuration file structure
46 Configuration file structure
47 **kw : misc
47 **kw : misc
48 Additional arguments
48 Additional arguments
49 """
49 """
50
50
51 super(CSSHTMLHeaderPreprocessor, self).__init__(config=config, **kw)
51 super(CSSHTMLHeaderPreprocessor, self).__init__(config=config, **kw)
52
52
53 if self.enabled :
53 if self.enabled :
54 self._regen_header()
54 self._regen_header()
55
55
56
56
57 def preprocess(self, nb, resources):
57 def preprocess(self, nb, resources):
58 """Fetch and add CSS to the resource dictionary
58 """Fetch and add CSS to the resource dictionary
59
59
60 Fetch CSS from IPython and Pygments to add at the beginning
60 Fetch CSS from IPython and Pygments to add at the beginning
61 of the html files. Add this css in resources in the
61 of the html files. Add this css in resources in the
62 "inlining.css" key
62 "inlining.css" key
63
63
64 Parameters
64 Parameters
65 ----------
65 ----------
66 nb : NotebookNode
66 nb : NotebookNode
67 Notebook being converted
67 Notebook being converted
68 resources : dictionary
68 resources : dictionary
69 Additional resources used in the conversion process. Allows
69 Additional resources used in the conversion process. Allows
70 preprocessors to pass variables into the Jinja engine.
70 preprocessors to pass variables into the Jinja engine.
71 """
71 """
72
72
73 resources['inlining'] = {}
73 resources['inlining'] = {}
74 resources['inlining']['css'] = self.header
74 resources['inlining']['css'] = self.header
75
75
76 return nb, resources
76 return nb, resources
77
77
78
78
79 def _regen_header(self):
79 def _regen_header(self):
80 """
80 """
81 Fills self.header with lines of CSS extracted from IPython
81 Fills self.header with lines of CSS extracted from IPython
82 and Pygments.
82 and Pygments.
83 """
83 """
84 from pygments.formatters import HtmlFormatter
84 from pygments.formatters import HtmlFormatter
85
85
86 #Clear existing header.
86 #Clear existing header.
87 header = []
87 header = []
88
88
89 #Construct path to IPy CSS
89 #Construct path to IPy CSS
90 sheet_filename = os.path.join(path.get_ipython_package_dir(),
90 from IPython.html import DEFAULT_STATIC_FILES_PATH
91 'html', 'static', 'style', 'style.min.css')
91 sheet_filename = os.path.join(DEFAULT_STATIC_FILES_PATH,
92 'style', 'style.min.css')
92
93
93 #Load style CSS file.
94 #Load style CSS file.
94 with io.open(sheet_filename, encoding='utf-8') as file:
95 with io.open(sheet_filename, encoding='utf-8') as file:
95 file_text = file.read()
96 file_text = file.read()
96 header.append(file_text)
97 header.append(file_text)
97
98
98 #Add pygments CSS
99 #Add pygments CSS
99 formatter = HtmlFormatter()
100 formatter = HtmlFormatter()
100 pygments_css = formatter.get_style_defs(self.highlight_class)
101 pygments_css = formatter.get_style_defs(self.highlight_class)
101 header.append(pygments_css)
102 header.append(pygments_css)
102
103
103 #Set header
104 #Set header
104 self.header = header
105 self.header = header
105
106
General Comments 0
You need to be logged in to leave comments. Login now