diff options
| -rw-r--r-- | sphinx/application.py | 45 | ||||
| -rw-r--r-- | sphinx/builders/__init__.py | 49 | ||||
| -rw-r--r-- | sphinx/builders/epub.py | 4 | ||||
| -rw-r--r-- | sphinx/builders/gettext.py | 6 | ||||
| -rw-r--r-- | sphinx/builders/html.py | 10 |
5 files changed, 62 insertions, 52 deletions
diff --git a/sphinx/application.py b/sphinx/application.py index b1af74bf..052ad1ce 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -39,7 +39,8 @@ from sphinx.environment import BuildEnvironment, SphinxStandaloneReader from sphinx.util import pycompat # imported for side-effects from sphinx.util.tags import Tags from sphinx.util.osutil import ENOENT -from sphinx.util.console import bold, lightgray, darkgray +from sphinx.util.console import bold, lightgray, darkgray, darkgreen, \ + term_width_line if hasattr(sys, 'intern'): intern = sys.intern @@ -351,6 +352,48 @@ class Sphinx(object): message = message % (args or kwargs) self._log(lightgray(message), self._status) + def _display_chunk(chunk): + if isinstance(chunk, (list, tuple)): + if len(chunk) == 1: + return str(chunk[0]) + return '%s .. %s' % (chunk[0], chunk[-1]) + return str(chunk) + + def old_status_iterator(self, iterable, summary, colorfunc=darkgreen, + stringify_func=_display_chunk): + l = 0 + for item in iterable: + if l == 0: + self.info(bold(summary), nonl=1) + l = 1 + self.info(colorfunc(stringify_func(item)) + ' ', nonl=1) + yield item + if l == 1: + self.info() + + # new version with progress info + def status_iterator(self, iterable, summary, colorfunc=darkgreen, length=0, + stringify_func=_display_chunk): + if length == 0: + for item in self.old_status_iterator(iterable, summary, colorfunc, + stringify_func): + yield item + return + l = 0 + summary = bold(summary) + for item in iterable: + l += 1 + s = '%s[%3d%%] %s' % (summary, 100*l/length, + colorfunc(stringify_func(item))) + if self.verbosity: + s += '\n' + else: + s = term_width_line(s) + self.info(s, nonl=1) + yield item + if l > 0: + self.info() + # ---- general extensibility interface ------------------------------------- def setup_extension(self, extension): diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index 833269c6..d0e85ae7 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -22,7 +22,7 @@ from docutils import nodes from sphinx.util import i18n, path_stabilize from sphinx.util.osutil import SEP, relative_uri, find_catalog -from sphinx.util.console import bold, purple, darkgreen, term_width_line +from sphinx.util.console import bold, purple, darkgreen # side effect: registers roles and directives from sphinx import roles @@ -62,6 +62,9 @@ class Builder(object): self.tags.add(self.name) self.tags.add("format_%s" % self.format) self.tags.add("builder_%s" % self.name) + # compatibility aliases + self.status_iterator = app.status_iterator + self.old_status_iterator = app.old_status_iterator # images that need to be copied over (source -> dest) self.images = {} @@ -113,41 +116,6 @@ class Builder(object): """ raise NotImplementedError - def old_status_iterator(self, iterable, summary, colorfunc=darkgreen, - stringify_func=lambda x: x): - l = 0 - for item in iterable: - if l == 0: - self.info(bold(summary), nonl=1) - l = 1 - self.info(colorfunc(stringify_func(item)) + ' ', nonl=1) - yield item - if l == 1: - self.info() - - # new version with progress info - def status_iterator(self, iterable, summary, colorfunc=darkgreen, length=0, - stringify_func=lambda x: x): - if length == 0: - for item in self.old_status_iterator(iterable, summary, colorfunc, - stringify_func): - yield item - return - l = 0 - summary = bold(summary) - for item in iterable: - l += 1 - s = '%s[%3d%%] %s' % (summary, 100*l/length, - colorfunc(stringify_func(item))) - if self.app.verbosity: - s += '\n' - else: - s = term_width_line(s) - self.info(s, nonl=1) - yield item - if l > 0: - self.info() - supported_image_types = [] def post_process_images(self, doctree): @@ -181,7 +149,7 @@ class Builder(object): return self.info(bold('building [mo]: '), nonl=1) self.info(message) - for catalog in self.status_iterator( + for catalog in self.app.status_iterator( catalogs, 'writing output... ', darkgreen, len(catalogs), lambda c: c.mo_path): catalog.write_mo(self.config.language) @@ -370,7 +338,7 @@ class Builder(object): self.env.set_warnfunc(self.warn) def _write_serial(self, docnames, warnings): - for docname in self.status_iterator( + for docname in self.app.status_iterator( docnames, 'writing output... ', darkgreen, len(docnames)): doctree = self.env.get_and_resolve_doctree(docname, self) self.write_doc_serialized(docname, doctree) @@ -415,9 +383,8 @@ class Builder(object): nchunks += 1 # partition documents in "chunks" that will be written by one Process chunks = [docnames[i*chunksize:(i+1)*chunksize] for i in range(nchunks)] - for docnames in self.status_iterator( - chunks, 'writing output... ', darkgreen, len(chunks), - lambda chk: '%s .. %s' % (chk[0], chk[-1])): + for docnames in self.app.status_iterator( + chunks, 'writing output... ', darkgreen, len(chunks)): docs = [] for docname in docnames: doctree = self.env.get_and_resolve_doctree(docname, self) diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index 95a0ef0a..5f9f6643 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -405,8 +405,8 @@ class EpubBuilder(StandaloneHTMLBuilder): converting the format and resizing the image if necessary/possible. """ ensuredir(path.join(self.outdir, '_images')) - for src in self.status_iterator(self.images, 'copying images... ', - brown, len(self.images)): + for src in self.app.status_iterator(self.images, 'copying images... ', + brown, len(self.images)): dest = self.images[src] try: img = Image.open(path.join(self.srcdir, src)) diff --git a/sphinx/builders/gettext.py b/sphinx/builders/gettext.py index 657ce924..d21c79fc 100644 --- a/sphinx/builders/gettext.py +++ b/sphinx/builders/gettext.py @@ -170,8 +170,8 @@ class MessageCatalogBuilder(I18nBuilder): extract_translations = self.templates.environment.extract_translations - for template in self.status_iterator(files, - 'reading templates... ', purple, len(files)): + for template in self.app.status_iterator( + files, 'reading templates... ', purple, len(files)): with open(template, 'r', encoding='utf-8') as f: context = f.read() for line, meth, msg in extract_translations(context): @@ -191,7 +191,7 @@ class MessageCatalogBuilder(I18nBuilder): ctime = datetime.fromtimestamp( timestamp, ltz).strftime('%Y-%m-%d %H:%M%z'), ) - for textdomain, catalog in self.status_iterator( + for textdomain, catalog in self.app.status_iterator( iteritems(self.catalogs), "writing message catalogs... ", darkgreen, len(self.catalogs), lambda textdomain__: textdomain__[0]): diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index ec3a8186..e364a4da 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -526,8 +526,8 @@ class StandaloneHTMLBuilder(Builder): # copy image files if self.images: ensuredir(path.join(self.outdir, '_images')) - for src in self.status_iterator(self.images, 'copying images... ', - brown, len(self.images)): + for src in self.app.status_iterator(self.images, 'copying images... ', + brown, len(self.images)): dest = self.images[src] try: copyfile(path.join(self.srcdir, src), @@ -540,9 +540,9 @@ class StandaloneHTMLBuilder(Builder): # copy downloadable files if self.env.dlfiles: ensuredir(path.join(self.outdir, '_downloads')) - for src in self.status_iterator(self.env.dlfiles, - 'copying downloadable files... ', - brown, len(self.env.dlfiles)): + for src in self.app.status_iterator(self.env.dlfiles, + 'copying downloadable files... ', + brown, len(self.env.dlfiles)): dest = self.env.dlfiles[src][1] try: copyfile(path.join(self.srcdir, src), |
