summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sphinx/application.py45
-rw-r--r--sphinx/builders/__init__.py49
-rw-r--r--sphinx/builders/epub.py4
-rw-r--r--sphinx/builders/gettext.py6
-rw-r--r--sphinx/builders/html.py10
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),