Merged in tk0miya/sphinx (pull request #297)

Add imgpath property to all builders
This commit is contained in:
Takayuki Shimizukawa 2014-09-29 00:32:38 +09:00
commit 7d47d60242
7 changed files with 20 additions and 19 deletions

View File

@ -70,6 +70,10 @@ class Builder(object):
# images that need to be copied over (source -> dest) # images that need to be copied over (source -> dest)
self.images = {} self.images = {}
# basename of images directory
imagedir = ""
# relative path to image directory from current docname (used at writing docs)
imgpath = ""
# these get set later # these get set later
self.parallel_ok = False self.parallel_ok = False

View File

@ -404,7 +404,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
The method tries to read and write the files with the PIL, The method tries to read and write the files with the PIL,
converting the format and resizing the image if necessary/possible. converting the format and resizing the image if necessary/possible.
""" """
ensuredir(path.join(self.outdir, '_images')) ensuredir(path.join(self.outdir, self.imagedir))
for src in self.app.status_iterator(self.images, 'copying images... ', for src in self.app.status_iterator(self.images, 'copying images... ',
brown, len(self.images)): brown, len(self.images)):
dest = self.images[src] dest = self.images[src]
@ -416,7 +416,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
(path.join(self.srcdir, src), )) (path.join(self.srcdir, src), ))
try: try:
copyfile(path.join(self.srcdir, src), copyfile(path.join(self.srcdir, src),
path.join(self.outdir, '_images', dest)) path.join(self.outdir, self.imagedir, dest))
except (IOError, OSError) as err: except (IOError, OSError) as err:
self.warn('cannot copy image file %r: %s' % self.warn('cannot copy image file %r: %s' %
(path.join(self.srcdir, src), err)) (path.join(self.srcdir, src), err))
@ -432,7 +432,7 @@ class EpubBuilder(StandaloneHTMLBuilder):
nh = (height * nw) / width nh = (height * nw) / width
img = img.resize((nw, nh), Image.BICUBIC) img = img.resize((nw, nh), Image.BICUBIC)
try: try:
img.save(path.join(self.outdir, '_images', dest)) img.save(path.join(self.outdir, self.imagedir, dest))
except (IOError, OSError) as err: except (IOError, OSError) as err:
self.warn('cannot write image file %r: %s' % self.warn('cannot write image file %r: %s' %
(path.join(self.srcdir, src), err)) (path.join(self.srcdir, src), err))

View File

@ -95,6 +95,8 @@ class StandaloneHTMLBuilder(Builder):
# a hash of all config values that, if changed, cause a full rebuild # a hash of all config values that, if changed, cause a full rebuild
self.config_hash = '' self.config_hash = ''
self.tags_hash = '' self.tags_hash = ''
# basename of images directory
self.imagedir = '_images'
# section numbers for headings in the currently visited document # section numbers for headings in the currently visited document
self.secnumbers = {} self.secnumbers = {}
# currently written docname # currently written docname
@ -437,7 +439,7 @@ class StandaloneHTMLBuilder(Builder):
self.handle_page(docname, ctx, event_arg=doctree) self.handle_page(docname, ctx, event_arg=doctree)
def write_doc_serialized(self, docname, doctree): def write_doc_serialized(self, docname, doctree):
self.imgpath = relative_uri(self.get_target_uri(docname), '_images') self.imgpath = relative_uri(self.get_target_uri(docname), self.imagedir)
self.post_process_images(doctree) self.post_process_images(doctree)
title = self.env.longtitles.get(docname) title = self.env.longtitles.get(docname)
title = title and self.render_partial(title)['title'] or '' title = title and self.render_partial(title)['title'] or ''
@ -535,13 +537,13 @@ class StandaloneHTMLBuilder(Builder):
def copy_image_files(self): def copy_image_files(self):
# copy image files # copy image files
if self.images: if self.images:
ensuredir(path.join(self.outdir, '_images')) ensuredir(path.join(self.outdir, self.imagedir))
for src in self.app.status_iterator(self.images, 'copying images... ', for src in self.app.status_iterator(self.images, 'copying images... ',
brown, len(self.images)): brown, len(self.images)):
dest = self.images[src] dest = self.images[src]
try: try:
copyfile(path.join(self.srcdir, src), copyfile(path.join(self.srcdir, src),
path.join(self.outdir, '_images', dest)) path.join(self.outdir, self.imagedir, dest))
except Exception as err: except Exception as err:
self.warn('cannot copy image file %r: %s' % self.warn('cannot copy image file %r: %s' %
(path.join(self.srcdir, src), err)) (path.join(self.srcdir, src), err))
@ -1029,6 +1031,7 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder):
def init(self): def init(self):
self.config_hash = '' self.config_hash = ''
self.tags_hash = '' self.tags_hash = ''
self.imagedir = '_images'
self.theme = None # no theme necessary self.theme = None # no theme necessary
self.templates = None # no template bridge necessary self.templates = None # no template bridge necessary
self.init_translator_class() self.init_translator_class()

View File

@ -157,7 +157,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder):
olen = len(outdir) olen = len(outdir)
projectfiles = [] projectfiles = []
staticdir = path.join(outdir, '_static') staticdir = path.join(outdir, '_static')
imagesdir = path.join(outdir, '_images') imagesdir = path.join(outdir, self.imagedir)
for root, dirs, files in os.walk(outdir): for root, dirs, files in os.walk(outdir):
resourcedir = root.startswith(staticdir) or \ resourcedir = root.startswith(staticdir) or \
root.startswith(imagesdir) root.startswith(imagesdir)

View File

@ -59,7 +59,7 @@ class WebSupportBuilder(PickleHTMLBuilder):
self.secnumbers = self.env.toc_secnumbers.get(docname, {}) self.secnumbers = self.env.toc_secnumbers.get(docname, {})
self.fignumbers = self.env.toc_fignumbers.get(docname, {}) self.fignumbers = self.env.toc_fignumbers.get(docname, {})
self.imgpath = '/' + posixpath.join(self.virtual_staticdir, '_images') self.imgpath = '/' + posixpath.join(self.virtual_staticdir, self.imagedir)
self.dlpath = '/' + posixpath.join(self.virtual_staticdir, '_downloads') self.dlpath = '/' + posixpath.join(self.virtual_staticdir, '_downloads')
self.current_docname = docname self.current_docname = docname
self.docwriter.write(doctree, destination) self.docwriter.write(doctree, destination)
@ -71,7 +71,7 @@ class WebSupportBuilder(PickleHTMLBuilder):
self.handle_page(docname, ctx, event_arg=doctree) self.handle_page(docname, ctx, event_arg=doctree)
def write_doc_serialized(self, docname, doctree): def write_doc_serialized(self, docname, doctree):
self.imgpath = '/' + posixpath.join(self.virtual_staticdir, '_images') self.imgpath = '/' + posixpath.join(self.virtual_staticdir, self.imagedir)
self.post_process_images(doctree) self.post_process_images(doctree)
title = self.env.longtitles.get(docname) title = self.env.longtitles.get(docname)
title = title and self.render_partial(title)['title'] or '' title = title and self.render_partial(title)['title'] or ''
@ -149,7 +149,7 @@ class WebSupportBuilder(PickleHTMLBuilder):
PickleHTMLBuilder.handle_finish(self) PickleHTMLBuilder.handle_finish(self)
# move static stuff over to separate directory # move static stuff over to separate directory
directories = ['_images', '_static'] directories = [self.imagedir, '_static']
for directory in directories: for directory in directories:
src = path.join(self.outdir, directory) src = path.join(self.outdir, directory)
dst = path.join(self.staticdir, directory) dst = path.join(self.staticdir, directory)

View File

@ -146,14 +146,8 @@ def render_dot(self, code, options, format, prefix='graphviz'):
).encode('utf-8') ).encode('utf-8')
fname = '%s-%s.%s' % (prefix, sha1(hashkey).hexdigest(), format) fname = '%s-%s.%s' % (prefix, sha1(hashkey).hexdigest(), format)
if hasattr(self.builder, 'imgpath'): relfn = posixpath.join(self.builder.imgpath, fname)
# HTML outfn = path.join(self.builder.outdir, self.builder.imagedir, fname)
relfn = posixpath.join(self.builder.imgpath, fname)
outfn = path.join(self.builder.outdir, '_images', fname)
else:
# LaTeX
relfn = fname
outfn = path.join(self.builder.outdir, fname)
if path.isfile(outfn): if path.isfile(outfn):
return relfn, outfn return relfn, outfn

View File

@ -86,7 +86,7 @@ def render_math(self, math):
shasum = "%s.png" % sha1(latex.encode('utf-8')).hexdigest() shasum = "%s.png" % sha1(latex.encode('utf-8')).hexdigest()
relfn = posixpath.join(self.builder.imgpath, 'math', shasum) relfn = posixpath.join(self.builder.imgpath, 'math', shasum)
outfn = path.join(self.builder.outdir, '_images', 'math', shasum) outfn = path.join(self.builder.outdir, self.builder.imagedir, 'math', shasum)
if path.isfile(outfn): if path.isfile(outfn):
depth = read_png_depth(outfn) depth = read_png_depth(outfn)
return relfn, depth return relfn, depth