##// END OF EJS Templates
Cleanup and refactor, transformers
Cleanup and refactor, transformers

File last commit:

r10674:6e8e0573
r10674:6e8e0573
Show More
csshtmlheader.py
119 lines | 3.6 KiB | text/x-python | PythonLexer
"""Module that pre-processes the notebook for export to HTML.
"""
#-----------------------------------------------------------------------------
# Copyright (c) 2013, the IPython Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import os
import io
from pygments.formatters import HtmlFormatter
from IPython.utils import path
from .activatable import ActivatableTransformer
#-----------------------------------------------------------------------------
# Classes and functions
#-----------------------------------------------------------------------------
class CSSHtmlHeaderTransformer(ActivatableTransformer):
"""
Transformer used to pre-process notebook for HTML output. Adds IPython notebook
front-end CSS and Pygments CSS to HTML output.
"""
header = []
def __init__(self, config=None, **kw):
"""
Public constructor
Parameters
----------
config : Config
Configuration file structure
**kw : misc
Additional arguments
"""
super(CSSHtmlHeaderTransformer, self).__init__(config=config, **kw)
if self.enabled :
self._regen_header()
def __call__(self, nb, resources):
"""Fetch and add CSS to the resource dictionary
Fetch CSS from IPython and Pygments to add at the beginning
of the html files. Add this css in resources in the
"inlining.css" key
Parameters
----------
nb : NotebookNode
Notebook being converted
resources : dictionary
Additional resources used in the conversion process. Allows
transformers to pass variables into the Jinja engine.
"""
resources['inlining'] = {}
resources['inlining']['css'] = self.header
return nb, resources
def _regen_header(self):
"""
Fills self.header with lines of CSS extracted from iPython
and Pygments.
"""
#Clear existing header.
header = []
#Construct path to iPy CSS
static = os.path.join(path.get_ipython_package_dir(), 'frontend',
'html', 'notebook', 'static')
css = os.path.join(static, 'css')
#Load each known CSS file.
for sheet in [
# TODO: do we need jquery and prettify?
# os.path.join(static, 'jquery', 'css', 'themes', 'base',
# 'jquery-ui.min.css'),
# os.path.join(static, 'prettify', 'prettify.css'),
os.path.join(css, 'boilerplate.css'),
os.path.join(css, 'fbm.css'),
os.path.join(css, 'notebook.css'),
os.path.join(css, 'renderedhtml.css'),
os.path.join(css, 'style.min.css'),
]:
try:
with io.open(sheet, encoding='utf-8') as file:
file_text = file.read()
header.append(file_text)
except IOError:
# New version of iPython with style.min.css, pass
pass
#Add pygments CSS
pygments_css = HtmlFormatter().get_style_defs('.highlight')
header.append(pygments_css)
#Set header
self.header = header