import os, re
from Ft.Lib import Uri
from Ft.Lib.DistExt import InstallDocs
class InstallHtml(InstallDocs.InstallDocs):
command_name = 'install_html'
description = "install HTML documentation"
# The extension used for the generated HTML files
output_extension = '.html'
def finalize_options(self):
if self.install_dir is None:
install = self.get_finalized_command('install')
self.install_dir = os.path.join(install.install_docs, 'html')
return InstallDocs.InstallDocs.finalize_options(self)
def get_default_stylesheets(self):
return {'docbook' : 'docbook_html.xslt',
'sdocbook' : 'sdocbook_html.xslt',
'modules' : 'modules_html.xslt',
'extensions' : 'extensions_html.xslt',
'commandline' : 'commandline_html.xslt',
'docbook_html' : 'docbook_html1.xslt',
}
def get_default_css(self):
"""
Returns a mapping of stylesheet names to their associated CSS.
The CSS file is assumed to be relative to the stylesheet URI.
"""
return {'docbook' : 'docbook_html.css',
'sdocbook' : 'sdocbook_html.css',
'modules' : 'modules.css',
'extensions' : 'extensions.css',
'commandline' : 'commandline.css',
}
def get_stylesheet_extras(self, stylesheet, base_uri):
css = self.get_default_css().get(stylesheet)
if css is None:
return []
def find_css_uris(uri):
"""Find all the CSS dependencies (@import directives)."""
uris = [uri]
stream = Uri.UrlOpen(uri)
for line in Uri.UrlOpen(uri).readlines():
match = re.match(r"\s*@import\s+url\s*\((.*)\)", line)
if match:
next_uri = Uri.BaseJoin(uri, eval(match.group(1)))
uris.extend(find_css_uris(next_uri))
return uris
return find_css_uris(Uri.BaseJoin(base_uri, css))
def get_output_filename(self, document):
basedir, basename = os.path.split(document.source)
basedir = basedir[len(self.build_dir) + len(os.sep):]
basename, source_ext = os.path.splitext(basename)
basename += self.output_extension
return os.path.join(self.install_dir, basedir, basename)
|