From cbb4266b198490cbebffdf104e5127118bda29b5 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 20 Aug 2016 18:31:11 +0900 Subject: [PATCH 01/11] Fix CHANGES --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 84e6ad140..7ce0eb45c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -Release 1.4.6 (in development) +Release 1.4.7 (in development) ============================== Bugs fixed From 16b99532ca03bfbcce4e39d04d08cbfb9e8f1323 Mon Sep 17 00:00:00 2001 From: Yoshiki Shibukawa Date: Fri, 19 Aug 2016 17:16:12 +0900 Subject: [PATCH 02/11] flatten genindex columns' height --- CHANGES | 1 + sphinx/jinja2glue.py | 22 ++++++++++++++++++++++ sphinx/themes/basic/genindex.html | 2 +- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 7ce0eb45c..0999e9ea0 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ Release 1.4.7 (in development) Bugs fixed ---------- +* #2870: flatten genindex columns' heights. Release 1.4.6 (released Aug 20, 2016) ===================================== diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py index f3ce87a8c..df1aa490c 100644 --- a/sphinx/jinja2glue.py +++ b/sphinx/jinja2glue.py @@ -35,6 +35,27 @@ def _toint(val): return 0 +def _slice_index(values, slices): + seq = list(values) + length = 0 + for value in values: + length += 1 + len(value[1][1]) # count includes subitems + items_per_slice = length // slices + offset = 0 + for slice_number in range(slices): + count = 0 + start = offset + if slices == slice_number + 1: # last column + offset = len(seq) + else: + for value in values[offset:]: + count += 1 + len(value[1][1]) + offset += 1 + if count >= items_per_slice: + break + yield seq[start:offset] + + def accesskey(context, key): """Helper to output each access key only once.""" if '_accesskeys' not in context: @@ -127,6 +148,7 @@ class BuiltinTemplateLoader(TemplateBridge, BaseLoader): extensions=extensions) self.environment.filters['tobool'] = _tobool self.environment.filters['toint'] = _toint + self.environment.filters['slice_index'] = _slice_index self.environment.globals['debug'] = contextfunction(pformat) self.environment.globals['accesskey'] = contextfunction(accesskey) self.environment.globals['idgen'] = idgen diff --git a/sphinx/themes/basic/genindex.html b/sphinx/themes/basic/genindex.html index fac7f1899..c72d980b3 100644 --- a/sphinx/themes/basic/genindex.html +++ b/sphinx/themes/basic/genindex.html @@ -44,7 +44,7 @@ {%- for key, entries in genindexentries %}

{{ key }}

- {%- for column in entries|slice(2) if column %} + {%- for column in entries|slice_index(2) if column %}
{%- for entryname, (links, subitems, _) in column %} {{ indexentries(entryname, links) }} From 4ff5cbfaf920700382f809abe5def23e07bd0553 Mon Sep 17 00:00:00 2001 From: Yoshiki Shibukawa Date: Sat, 20 Aug 2016 23:15:15 +0900 Subject: [PATCH 03/11] fix #2856: use same regex word splitter in Python and JS --- sphinx/themes/basic/static/searchtools.js_t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/themes/basic/static/searchtools.js_t b/sphinx/themes/basic/static/searchtools.js_t index 8a150b272..45ff1e4de 100644 --- a/sphinx/themes/basic/static/searchtools.js_t +++ b/sphinx/themes/basic/static/searchtools.js_t @@ -145,7 +145,7 @@ var Search = { var searchterms = []; var excluded = []; var hlterms = []; - var tmp = query.split(/\s+/); + var tmp = query.split(/\W+/); var objectterms = []; for (i = 0; i < tmp.length; i++) { if (tmp[i] !== "") { From 14a1d5df29d9053d4e39f13923822eef860f2324 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Mon, 22 Aug 2016 19:49:22 +0900 Subject: [PATCH 04/11] Update CHANGES for PR#2879 --- CHANGES | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES b/CHANGES index 0999e9ea0..f6d4832a9 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,7 @@ Bugs fixed ---------- * #2870: flatten genindex columns' heights. +* #2856: Search on generated HTML site doesnt find some symbols Release 1.4.6 (released Aug 20, 2016) ===================================== From 0d58607d8a5b58e154f4361158650583dbe1e020 Mon Sep 17 00:00:00 2001 From: Tony Kelman Date: Sun, 21 Aug 2016 22:22:07 -0700 Subject: [PATCH 05/11] linkcheck: Fall back to a GET request on 403 status stable branch version of 2f46c7899ca03597bd5b563b085f2bd8c685899a Add changelog entry --- CHANGES | 1 + sphinx/builders/linkcheck.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index f6d4832a9..3032c95ac 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,7 @@ Bugs fixed * #2870: flatten genindex columns' heights. * #2856: Search on generated HTML site doesnt find some symbols +* #2882: Fall back to a GET request on 403 status in linkcheck Release 1.4.6 (released Aug 20, 2016) ===================================== diff --git a/sphinx/builders/linkcheck.py b/sphinx/builders/linkcheck.py index 0f1716aaf..5ceb8d716 100644 --- a/sphinx/builders/linkcheck.py +++ b/sphinx/builders/linkcheck.py @@ -183,10 +183,10 @@ class CheckExternalLinksBuilder(Builder): f = opener.open(req, **kwargs) f.close() except HTTPError as err: - if err.code != 405: + if err.code not in (403, 405): raise # retry with GET if that fails, some servers - # don't like HEAD requests and reply with 405 + # don't like HEAD requests and reply with 403 or 405 req = Request(req_url) f = opener.open(req, **kwargs) f.close() From dd09457d7ea1ee4ef13f197c9ebd5e65c34e3ec7 Mon Sep 17 00:00:00 2001 From: Yoshiki Shibukawa Date: Tue, 23 Aug 2016 18:42:12 +0900 Subject: [PATCH 06/11] fix document: rtd is optional from 1.4 --- doc/theming.rst | 57 ++++++++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/doc/theming.rst b/doc/theming.rst index d7789924b..bb7dd8305 100644 --- a/doc/theming.rst +++ b/doc/theming.rst @@ -86,33 +86,28 @@ Builtin themes +--------------------+--------------------+ | **Theme overview** | | +--------------------+--------------------+ -| |alabaster| | |sphinx_rtd_theme| | +| |alabaster| | |classic| | | | | -| *alabaster* | *sphinx_rtd_theme* | +| *alabaster* | *classic* | +--------------------+--------------------+ -| |classic| | |sphinxdoc| | +| |sphinxdoc| | |scrolls| | | | | -| *classic* | *sphinxdoc* | +| *sphinxdoc* | *scrolls* | +--------------------+--------------------+ -| |scrolls| | |agogo| | +| |agogo| | |traditional| | | | | -| *scrolls* | *agogo* | +| *agogo* | *traditional* | +--------------------+--------------------+ -| |traditional| | |nature| | +| |nature| | |haiku| | | | | -| *traditional* | *nature* | +| *nature* | *haiku* | +--------------------+--------------------+ -| |haiku| | |pyramid| | +| |pyramid| | |bizstyle| | | | | -| *haiku* | *pyramid* | -+--------------------+--------------------+ -| |bizstyle| | | -| | | -| *bizstyle* | | +| *pyramid* | *bizstyle* | +--------------------+--------------------+ .. |alabaster| image:: themes/alabaster.png -.. |sphinx_rtd_theme| image:: themes/sphinx_rtd_theme.png .. |classic| image:: themes/classic.png .. |sphinxdoc| image:: themes/sphinxdoc.png .. |scrolls| image:: themes/scrolls.png @@ -147,13 +142,6 @@ These themes are: .. _Alabaster theme: https://pypi.python.org/pypi/alabaster -* **sphinx_rtd_theme** -- `Read the Docs Sphinx Theme`_. - This is a mobile-friendly sphinx theme that was made for readthedocs.org. - View a working demo over on readthedocs.org. You can get options information - at `Read the Docs Sphinx Theme`_ page. - - .. _Read the Docs Sphinx Theme: https://pypi.python.org/pypi/sphinx_rtd_theme - * **classic** -- This is the classic theme, which looks like `the Python 2 documentation `_. It can be customized via these options: @@ -359,3 +347,28 @@ is built with the classic theme, the output directory will contain a .. [1] It is not an executable Python file, as opposed to :file:`conf.py`, because that would pose an unnecessary security risk if themes are shared. + +Third Party Themes +------------------ + +.. cssclass:: longtable + ++--------------------+--------------------+ +| **Theme overview** | | ++--------------------+--------------------+ +| |sphinx_rtd_theme| | | +| | | +| *sphinx_rtd_theme* | | ++--------------------+--------------------+ + +.. |sphinx_rtd_theme| image:: themes/sphinx_rtd_theme.png + +* **sphinx_rtd_theme** -- `Read the Docs Sphinx Theme`_. + This is a mobile-friendly sphinx theme that was made for readthedocs.org. + View a working demo over on readthedocs.org. You can get install and options + information at `Read the Docs Sphinx Theme`_ page. + + .. _Read the Docs Sphinx Theme: https://pypi.python.org/pypi/sphinx_rtd_theme + + .. versionchanged:: 1.4 + **sphinx_rtd_theme** has become optional. From 52f4c072027347dc57b772e60edee5026c7754b9 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 27 Aug 2016 14:20:08 +0900 Subject: [PATCH 07/11] Add tests for sphinx.util.jsdump:loads() --- tests/test_util_jsdump.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/test_util_jsdump.py b/tests/test_util_jsdump.py index f8d31568d..2bfeeb90e 100644 --- a/tests/test_util_jsdump.py +++ b/tests/test_util_jsdump.py @@ -1,9 +1,16 @@ # -*- coding: utf-8 -*- +from sphinx.util.jsdump import dumps, loads + def test_jsdump(): - from sphinx.util.jsdump import dumps + data = {'1a': 1} + assert dumps(data) == '{"1a":1}' + assert data == loads(dumps(data)) - assert dumps({'1a': 1}) == '{"1a":1}' - assert dumps({'a1': 1}) == '{a1:1}' + data = {'a1': 1} + assert dumps(data) == '{a1:1}' + assert data == loads(dumps(data)) - assert dumps({u'a\xe8': 1}) == '{"a\\u00e8":1}' + data = {u'a\xe8': 1} + assert dumps(data) == '{"a\\u00e8":1}' + assert data == loads(dumps(data)) From acd4d9f2ba42baec9e538b6f16f18efe2e595286 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 27 Aug 2016 15:28:36 +0900 Subject: [PATCH 08/11] #2902: jsdump.loads fails to load search index if keywords starts with underscore --- CHANGES | 2 ++ sphinx/util/jsdump.py | 2 +- tests/test_util_jsdump.py | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 3032c95ac..b47d08966 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,8 @@ Bugs fixed * #2870: flatten genindex columns' heights. * #2856: Search on generated HTML site doesnt find some symbols * #2882: Fall back to a GET request on 403 status in linkcheck +* #2902: jsdump.loads fails to load search index if keywords starts with + underscore Release 1.4.6 (released Aug 20, 2016) ===================================== diff --git a/sphinx/util/jsdump.py b/sphinx/util/jsdump.py index 43c2962f1..5a2148c5b 100644 --- a/sphinx/util/jsdump.py +++ b/sphinx/util/jsdump.py @@ -18,7 +18,7 @@ from sphinx.util.pycompat import u _str_re = re.compile(r'"(\\\\|\\"|[^"])*"') _int_re = re.compile(r'\d+') -_name_re = re.compile(r'[a-zA-Z]\w*') +_name_re = re.compile(r'[a-zA-Z_]\w*') _nameonly_re = re.compile(r'[a-zA-Z_][a-zA-Z0-9_]*$') # escape \, ", control characters and everything outside ASCII diff --git a/tests/test_util_jsdump.py b/tests/test_util_jsdump.py index 2bfeeb90e..8f98c79ac 100644 --- a/tests/test_util_jsdump.py +++ b/tests/test_util_jsdump.py @@ -14,3 +14,7 @@ def test_jsdump(): data = {u'a\xe8': 1} assert dumps(data) == '{"a\\u00e8":1}' assert data == loads(dumps(data)) + + data = {'_foo': 1} + assert dumps(data) == '{_foo:1}' + assert data == loads(dumps(data)) From 0d3f2e06cb7dad35bc166146de57cd7fc541e5df Mon Sep 17 00:00:00 2001 From: Yoshiki Shibukawa Date: Thu, 25 Aug 2016 23:35:18 +0900 Subject: [PATCH 09/11] epub: add auto generated orphan documents to spine with linear=no --- CHANGES | 1 + sphinx/builders/epub.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/CHANGES b/CHANGES index b47d08966..c37a72f73 100644 --- a/CHANGES +++ b/CHANGES @@ -9,6 +9,7 @@ Bugs fixed * #2882: Fall back to a GET request on 403 status in linkcheck * #2902: jsdump.loads fails to load search index if keywords starts with underscore +* #2900: Fix epub content.opf: add auto generated orphan files to spine. Release 1.4.6 (released Aug 20, 2016) ===================================== diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index f5f0d8098..e2c780261 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -123,6 +123,9 @@ FILE_TEMPLATE = u'''\ SPINE_TEMPLATE = u'''\ ''' +NO_LINEAR_SPINE_TEMPLATE = u'''\ + ''' + GUIDE_TEMPLATE = u'''\ ''' @@ -202,6 +205,7 @@ class EpubBuilder(StandaloneHTMLBuilder): coverpage_name = COVERPAGE_NAME file_template = FILE_TEMPLATE spine_template = SPINE_TEMPLATE + no_linear_spine_template = NO_LINEAR_SPINE_TEMPLATE guide_template = GUIDE_TEMPLATE toctree_template = TOCTREE_TEMPLATE doctype = DOCTYPE @@ -584,6 +588,7 @@ class EpubBuilder(StandaloneHTMLBuilder): # spine spine = [] + spinefiles = set() for item in self.refnodes: if '#' in item['refuri']: continue @@ -592,14 +597,23 @@ class EpubBuilder(StandaloneHTMLBuilder): spine.append(self.spine_template % { 'idref': self.esc(self.make_id(item['refuri'])) }) + spinefiles.add(item['refuri']) for info in self.domain_indices: spine.append(self.spine_template % { 'idref': self.esc(self.make_id(info[0] + self.out_suffix)) }) + spinefiles.add(info[0] + self.out_suffix) if self.get_builder_config('use_index', 'epub'): spine.append(self.spine_template % { 'idref': self.esc(self.make_id('genindex' + self.out_suffix)) }) + spinefiles.add('genindex' + self.out_suffix) + # add auto generated files + for name in self.files: + if name not in spinefiles and name.endswith(self.out_suffix): + spine.append(self.no_linear_spine_template % { + 'idref': self.esc(self.make_id(name)) + }) # add the optional cover content_tmpl = self.content_template @@ -626,6 +640,7 @@ class EpubBuilder(StandaloneHTMLBuilder): ctx = {'image': self.esc(image), 'title': self.config.project} self.handle_page( path.splitext(self.coverpage_name)[0], ctx, html_tmpl) + spinefiles.add(self.coverpage_name) guide = [] auto_add_cover = True From 21733b3244266601cc0c5687f2a848f7376ec63c Mon Sep 17 00:00:00 2001 From: Yoshiki Shibukawa Date: Thu, 25 Aug 2016 22:47:41 +0900 Subject: [PATCH 10/11] Fix hasdoc() function in Jinja2 template. --- CHANGES | 1 + sphinx/builders/html.py | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index c37a72f73..656f1a370 100644 --- a/CHANGES +++ b/CHANGES @@ -10,6 +10,7 @@ Bugs fixed * #2902: jsdump.loads fails to load search index if keywords starts with underscore * #2900: Fix epub content.opf: add auto generated orphan files to spine. +* #2899: Fix ``hasdoc()`` function in Jinja2 template. It can detect ``genindex``, ``search`` collectly. Release 1.4.6 (released Aug 20, 2016) ===================================== diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index e19da2271..c6289c513 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -785,7 +785,17 @@ class StandaloneHTMLBuilder(Builder): uri = relative_uri(baseuri, otheruri) or '#' return uri ctx['pathto'] = pathto - ctx['hasdoc'] = lambda name: name in self.env.all_docs + + def hasdoc(name): + if name in self.env.all_docs: + return True + elif name == 'search' and self.search: + return True + elif name == 'genindex' and self.get_builder_config('use_index', 'html'): + return True + return False + ctx['hasdoc'] = hasdoc + if self.name != 'htmlhelp': ctx['encoding'] = encoding = self.config.html_output_encoding else: From 2a95fec9851071c7856262acccb360875d509d0d Mon Sep 17 00:00:00 2001 From: Yoshiki Shibukawa Date: Fri, 26 Aug 2016 00:04:50 +0900 Subject: [PATCH 11/11] Fix epub result: skip creating links from image tags to original image files. --- CHANGES | 1 + sphinx/builders/epub.py | 3 ++- sphinx/builders/html.py | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 656f1a370..8150881fe 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,7 @@ Bugs fixed underscore * #2900: Fix epub content.opf: add auto generated orphan files to spine. * #2899: Fix ``hasdoc()`` function in Jinja2 template. It can detect ``genindex``, ``search`` collectly. +* #2901: Fix epub result: skip creating links from image tags to original image files. Release 1.4.6 (released Aug 20, 2016) ===================================== diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index e2c780261..ade887e56 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -190,7 +190,8 @@ class EpubBuilder(StandaloneHTMLBuilder): add_permalinks = False # don't add sidebar etc. embedded = True - + # dont' create links to original images from images + html_scaled_image_link = False # don't generate search index or include search page search = False diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index c6289c513..d1f5792e7 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -74,6 +74,8 @@ class StandaloneHTMLBuilder(Builder): link_suffix = '.html' # defaults to matching out_suffix indexer_format = js_index indexer_dumps_unicode = True + # create links to original images from images [True/False] + html_scaled_image_link = True supported_image_types = ['image/svg+xml', 'image/png', 'image/gif', 'image/jpeg'] searchindex_filename = 'searchindex.js' @@ -678,7 +680,7 @@ class StandaloneHTMLBuilder(Builder): """ Builder.post_process_images(self, doctree) - if self.config.html_scaled_image_link: + if self.config.html_scaled_image_link and self.html_scaled_image_link: for node in doctree.traverse(nodes.image): scale_keys = ('scale', 'width', 'height') if not any((key in node) for key in scale_keys) or \