From 864f9b9190310d3751d0b818aea6ae70e721d676 Mon Sep 17 00:00:00 2001 From: Jon Olav Vik Date: Mon, 26 Sep 2011 08:07:53 +0200 Subject: [PATCH 001/250] Inheritance diagram: Make tooltip from first line of docstring --- sphinx/ext/inheritance_diagram.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py index a2490486a..58f140bd6 100644 --- a/sphinx/ext/inheritance_diagram.py +++ b/sphinx/ext/inheritance_diagram.py @@ -246,6 +246,14 @@ class InheritanceGraph(object): url = urls.get(fullname) if url is not None: this_node_attrs['URL'] = '"%s"' % url + # Use first line of docstring as tooltip + modulename, classname = fullname.rsplit(".", 1) + module = __import__(modulename, fromlist=[classname]) + cls = module.__dict__[classname] + doc = inspect.getdoc(cls) + if doc: + this_node_attrs['tooltip'] = '"%s"' % doc.split("\n")[0] + res.append(' "%s" [%s];\n' % (name, self._format_node_attrs(this_node_attrs))) From da5e1e9aa3f1b89d6fb2a5bea919385b1de8a944 Mon Sep 17 00:00:00 2001 From: Jon Olav Vik Date: Tue, 27 Sep 2011 19:25:35 +0200 Subject: [PATCH 002/250] Avoid re-importing modules. --- sphinx/ext/inheritance_diagram.py | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py index 58f140bd6..d43ddd4c8 100644 --- a/sphinx/ext/inheritance_diagram.py +++ b/sphinx/ext/inheritance_diagram.py @@ -167,7 +167,7 @@ class InheritanceGraph(object): for cls in classes: recurse(cls) - return all_classes.values() + return all_classes def class_name(self, cls, parts=0): """Given a class object, return a fully-qualified name. @@ -187,7 +187,7 @@ class InheritanceGraph(object): def get_all_class_names(self): """Get all of the class names involved in the graph.""" - return [fullname for (_, fullname, _) in self.class_info] + return [fullname for (_, fullname, _) in self.class_info.values()] # These are the default attrs for graphviz default_graph_attrs = { @@ -198,8 +198,8 @@ class InheritanceGraph(object): 'shape': 'box', 'fontsize': 10, 'height': 0.25, - 'fontname': 'Vera Sans, DejaVu Sans, Liberation Sans, ' - 'Arial, Helvetica, sans', + 'fontname': '"Vera Sans, DejaVu Sans, Liberation Sans, ' + 'Arial, Helvetica, sans"', 'style': '"setlinewidth(0.5)"', } default_edge_attrs = { @@ -240,20 +240,16 @@ class InheritanceGraph(object): res.append('digraph %s {\n' % name) res.append(self._format_graph_attrs(g_attrs)) - for name, fullname, bases in self.class_info: + for cls, (name, fullname, bases) in self.class_info.items(): # Write the node this_node_attrs = n_attrs.copy() - url = urls.get(fullname) - if url is not None: - this_node_attrs['URL'] = '"%s"' % url - # Use first line of docstring as tooltip - modulename, classname = fullname.rsplit(".", 1) - module = __import__(modulename, fromlist=[classname]) - cls = module.__dict__[classname] - doc = inspect.getdoc(cls) - if doc: - this_node_attrs['tooltip'] = '"%s"' % doc.split("\n")[0] - + if fullname in urls: + this_node_attrs['URL'] = '"%s"' % urls[fullname] + # Use first line of docstring as tooltip, if available + if cls.__doc__: + doc = cls.__doc__.strip().split("\n")[0] + if doc: + this_node_attrs['tooltip'] = '"%s"' % doc res.append(' "%s" [%s];\n' % (name, self._format_node_attrs(this_node_attrs))) From 5e9fc8f90cadecfb1765e64748499573dac0e490 Mon Sep 17 00:00:00 2001 From: Akihiro Uchida Date: Wed, 9 Nov 2011 20:51:48 +0900 Subject: [PATCH 003/250] support pTeX and dvipdfmx with sphinx.sty --- sphinx/texinputs/sphinx.sty | 22 ++++++++++++++++++++++ sphinx/writers/latex.py | 11 ++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index 08adec9e8..01a642a90 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -45,6 +45,13 @@ %\renewcommand{\paperwidth}{8.5in} % typical squarish manual %\renewcommand{\paperwidth}{7in} % O'Reilly ``Programmming Python'' +% use pdfoutput for pTeX and dvipdfmx +\ifx\kanjiskip\undefined\else + \ifx\Gin@driver{dvipdfmx.def}\undefined\else + \newcount\pdfoutput\pdfoutput=0 + \fi +\fi + % For graphicx, check if we are compiling under latex or pdflatex. \ifx\pdftexversion\undefined \usepackage{graphicx} @@ -419,6 +426,21 @@ \addcontentsline{toc}{chapter}{\indexname} } +% to make pdf with correct encoded bookmarks in Japanese +% this should precede the hyperref package +\ifx\kanjiskip\undefined\else + \usepackage{atbegshi} + \ifx\ucs\undefined + \ifnum 42146=\euc"A4A2 + \AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}} + \else + \AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}} + \fi + \else + \AtBeginShipoutFirst{\special{pdf:tounicode UTF8-UCS2}} + \fi +\fi + % Include hyperref last. \RequirePackage[colorlinks,breaklinks, linkcolor=InnerLinkColor,filecolor=OuterLinkColor, diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index e5ef3a619..a3f33cac4 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -205,13 +205,10 @@ class LaTeXTranslator(nodes.NodeVisitor): # pTeX (Japanese TeX) for support if builder.config.language == 'ja': - self.elements['classoptions'] = ',dvipdfm' - # found elements of babel, but this should be above sphinx.sty. - # because pTeX (Japanese TeX) cannot handle this count. - self.elements['babel'] = r'\newcount\pdfoutput\pdfoutput=0' - # to make the pdf with correct encoded hyperref bookmarks - self.elements['preamble'] += \ - r'\AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}' + # use dvipdfmx as default class option in Japanese + self.elements['classoptions'] = ',dvipdfmx' + # disable babel which has not publishing quality in Japanese + self.elements['babel'] = '' else: self.elements['classoptions'] += ',english' # allow the user to override them all From 4814ad732dd6c77556d1e49f3b95d416fb6f1e9c Mon Sep 17 00:00:00 2001 From: Akihiro Uchida Date: Wed, 9 Nov 2011 20:52:13 +0900 Subject: [PATCH 004/250] use extractbb instead of ebb with make all-pdf-ja --- sphinx/texinputs/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/texinputs/Makefile b/sphinx/texinputs/Makefile index 76e7c3e25..9ce10a7de 100644 --- a/sphinx/texinputs/Makefile +++ b/sphinx/texinputs/Makefile @@ -16,7 +16,7 @@ all-ps: all-dvi for f in *.dvi; do dvips $$f; done all-pdf-ja: - for f in *.pdf *.png *.gif *.jpg *.jpeg; do ebb $$f; done + for f in *.pdf *.png *.gif *.jpg *.jpeg; do extractbb $$f; done for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done From 5228571c85a242ac27457447810df712f7738c5d Mon Sep 17 00:00:00 2001 From: Akihiro Uchida Date: Wed, 9 Nov 2011 20:55:29 +0900 Subject: [PATCH 005/250] adjust the margins for footer for jsclasses (Japanese standard document classes) --- sphinx/texinputs/sphinx.sty | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index 01a642a90..8b827e8b9 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -498,3 +498,11 @@ \@gobble } \def\FN@sf@gobble@twobracket[#1]#2{} + +% adjust the margins for footer, +% this works with the jsclasses only (Japanese standard document classes) +\ifx\@jsc@uplatextrue\undefined\else + \hypersetup{setpagesize=false} + \setlength\footskip{2\baselineskip} + \addtolength{\textheight}{-2\baselineskip} +\fi From 148e138a74a879fa564c0d674109f088c95cc715 Mon Sep 17 00:00:00 2001 From: Akihiro Uchida Date: Wed, 9 Nov 2011 20:57:11 +0900 Subject: [PATCH 006/250] fix the doubled index and bibliography on the TOC in jsclasses (Japanese standard document classes) --- sphinx/texinputs/sphinx.sty | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index 8b827e8b9..46cd2a1f3 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -506,3 +506,18 @@ \setlength\footskip{2\baselineskip} \addtolength{\textheight}{-2\baselineskip} \fi + +% fix the double index and bibliography on the table of contents +% in jsclasses (Japanese standard document classes) +\ifx\@jsc@uplatextrue\undefined\else + \renewcommand{\theindex}{ + \cleardoublepage + \phantomsection + \py@OldTheindex + } + \renewcommand{\thebibliography}[1]{ + \cleardoublepage + \phantomsection + \py@OldThebibliography{1} + } +\fi From 16a23ab40e50b4d62e8f752fe3a1092c440f8960 Mon Sep 17 00:00:00 2001 From: Akihiro Uchida Date: Wed, 9 Nov 2011 20:58:13 +0900 Subject: [PATCH 007/250] do not use \@chappos in Appendix with pTeX --- sphinx/texinputs/sphinx.sty | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index 46cd2a1f3..54e856771 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -521,3 +521,14 @@ \py@OldThebibliography{1} } \fi + +% do not use \@chappos in Appendix in pTeX +\ifx\kanjiskip\undefined\else + \renewcommand{\appendix}{\par + \setcounter{chapter}{0} + \setcounter{section}{0} + \gdef\@chapapp{\appendixname} + \gdef\@chappos{} + \gdef\thechapter{\@Alph\c@chapter} + } +\fi From a3d415a058d2e668955b75104dfce8d277c05992 Mon Sep 17 00:00:00 2001 From: Akihiro Uchida Date: Wed, 9 Nov 2011 21:05:39 +0900 Subject: [PATCH 008/250] add latexpdfja target for Makefile/make.bat --- sphinx/quickstart.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index c8dd2579c..3adccdecf 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -401,6 +401,7 @@ help: \t@echo " epub to make an epub" \t@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" \t@echo " latexpdf to make LaTeX files and run them through pdflatex" +\t@echo " latexpdfja to make LaTeX files and run them through platex and dvipdfmx" \t@echo " text to make text files" \t@echo " man to make manual pages" \t@echo " texinfo to make Texinfo files" @@ -482,6 +483,12 @@ latexpdf: \t$(MAKE) -C $(BUILDDIR)/latex all-pdf \t@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." +latexpdfja: +\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex +\t@echo "Running LaTeX files through platex and dvipdfmx..." +\t$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja +\t@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + text: \t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text \t@echo @@ -659,6 +666,26 @@ if "%%1" == "latex" ( \tgoto end ) +if "%%1" == "latexpdf" ( +\t%%SPHINXBUILD%% -b latex %%ALLSPHINXOPTS%% %%BUILDDIR%%/latex +\tcd %%BUILDDIR%%/latex +\tmake all-pdf +\tcd %%BUILDDIR%%/.. +\techo. +\techo.Build finished; the PDF files are in %%BUILDDIR%%/latex. +\tgoto end +) + +if "%%1" == "latexpdfja" ( +\t%%SPHINXBUILD%% -b latex %%ALLSPHINXOPTS%% %%BUILDDIR%%/latex +\tcd %%BUILDDIR%%/latex +\tmake all-pdf-ja +\tcd %%BUILDDIR%%/.. +\techo. +\techo.Build finished; the PDF files are in %%BUILDDIR%%/latex. +\tgoto end +) + if "%%1" == "text" ( \t%%SPHINXBUILD%% -b text %%ALLSPHINXOPTS%% %%BUILDDIR%%/text \tif errorlevel 1 exit /b 1 From 66f88048fe5b7ce4bb9d66c43f6a8c05ec9acc5e Mon Sep 17 00:00:00 2001 From: Akihiro Uchida Date: Thu, 10 Nov 2011 19:07:26 +0900 Subject: [PATCH 009/250] ignore exit code for mendex (Japanese version of makeindex) in make all-pdf-ja --- sphinx/texinputs/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/texinputs/Makefile b/sphinx/texinputs/Makefile index 9ce10a7de..6b87ad881 100644 --- a/sphinx/texinputs/Makefile +++ b/sphinx/texinputs/Makefile @@ -20,7 +20,7 @@ all-pdf-ja: for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done - for f in *.idx; do mendex -U -f -d "`basename $$f .idx`.dic" -s python.ist $$f; done + -for f in *.idx; do mendex -U -f -d "`basename $$f .idx`.dic" -s python.ist $$f; done for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done for f in *.dvi; do dvipdfmx $$f; done From 135bb6f6c8c7b75f16939a725173aa26f3896d25 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Sun, 11 Mar 2012 17:48:51 +0100 Subject: [PATCH 010/250] ENH: add a linkcode extension --- doc/ext/linkcode.rst | 47 +++++++++++++++++++++++++++ doc/extensions.rst | 1 + sphinx/ext/linkcode.py | 72 ++++++++++++++++++++++++++++++++++++++++++ tests/root/conf.py | 22 +++++++++++++ tests/test_linkcode.py | 28 ++++++++++++++++ 5 files changed, 170 insertions(+) create mode 100644 doc/ext/linkcode.rst create mode 100644 sphinx/ext/linkcode.py create mode 100644 tests/test_linkcode.py diff --git a/doc/ext/linkcode.rst b/doc/ext/linkcode.rst new file mode 100644 index 000000000..9ae247563 --- /dev/null +++ b/doc/ext/linkcode.rst @@ -0,0 +1,47 @@ +:mod:`sphinx.ext.linkcode` -- Add external links to source code +=============================================================== + +.. module:: sphinx.ext.linkcode + :synopsis: Add external links to source code. +.. moduleauthor:: Pauli Virtanen + +.. versionadded:: 1.1 + +This extension looks at your Python object descriptions +(``.. class::``, ``.. function::`` etc.) and adds external links to +code hosted somewhere on the web. The intent is similar to the +``sphinx.ext.viewcode`` extension, but assumes the source code can be +found somewhere on the Internet. + +In your configuration, you need to specify a :confval:`linkcode_resolve` +function that returns an URL based on the name of a module and +the full name of the object. + +.. confval:: linkcode_resolve + + This is a function ``linkcode_resolve(domain, info)``, + which should return the URL to source code corresponding to + the object in given domain with given information. + + The function should return ``None`` if no link is to be added. + + The argument ``domain`` specifies the language domain the object is + in. ``info`` is a dictionary with the following keys guaranteed to + be present (dependent on the domain): + + - ``c``: ``names`` (list of names for the object) + - ``cpp``: ``names`` (list of names for the object) + - ``py``: ``module`` (name of the module), ``fullname`` (name of the object) + - ``javascript``: ``object`` (name of the object), ``fullname`` (name of the item) + + Example: + + .. code-block:: python + + def linkcode_resolve(domain, info): + if domain != 'py': + return None + if not info['module']: + return None + filename = info['module'].replace('.', '/') + return "http://somesite/sourcerepo/%s.py" % filename diff --git a/doc/extensions.rst b/doc/extensions.rst index b93974486..07bc7fe4b 100644 --- a/doc/extensions.rst +++ b/doc/extensions.rst @@ -53,6 +53,7 @@ These extensions are built in and can be activated by respective entries in the ext/todo ext/extlinks ext/viewcode + ext/linkcode ext/oldcmarkup diff --git a/sphinx/ext/linkcode.py b/sphinx/ext/linkcode.py new file mode 100644 index 000000000..ffe5b9c09 --- /dev/null +++ b/sphinx/ext/linkcode.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +""" + sphinx.ext.linkcode + ~~~~~~~~~~~~~~~~~~~ + + Add external links to module code in Python object descriptions. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from docutils import nodes + +from sphinx import addnodes +from sphinx.locale import _ +from sphinx.errors import SphinxError + +class LinkcodeError(SphinxError): + category = "linkcode error" + +def doctree_read(app, doctree): + env = app.builder.env + + resolve_target = getattr(env.config, 'linkcode_resolve', None) + if not callable(env.config.linkcode_resolve): + raise LinkcodeError( + "Function `linkcode_resolve` is not given in conf.py") + + domain_keys = dict( + py=['module', 'fullname'], + c=['names'], + cpp=['names'], + js=['object', 'fullname'], + ) + + for objnode in doctree.traverse(addnodes.desc): + domain = objnode.get('domain') + uris = set() + for signode in objnode: + if not isinstance(signode, addnodes.desc_signature): + continue + + # Convert signode to a specified format + info = {} + for key in domain_keys.get(domain, []): + value = signode.get(key) + if not value: + value = '' + info[key] = value + if not info: + continue + + # Call user code to resolve the link + uri = resolve_target(domain, info) + if not uri: + # no source + continue + + if uri in uris or not uri: + # only one link per name, please + continue + uris.add(uri) + + onlynode = addnodes.only(expr='html') + onlynode += nodes.reference('', '', internal=False, refuri=uri) + onlynode[0] += nodes.inline('', _('[source]'), + classes=['viewcode-link']) + signode += onlynode + +def setup(app): + app.connect('doctree-read', doctree_read) + app.add_config_value('linkcode_resolve', None, 'env') diff --git a/tests/root/conf.py b/tests/root/conf.py index b97ddfcc1..37d5e91a7 100644 --- a/tests/root/conf.py +++ b/tests/root/conf.py @@ -67,6 +67,28 @@ extlinks = {'issue': ('http://bugs.python.org/issue%s', 'issue '), # modify tags from conf.py tags.add('confpytag') +# -- linkcode + +if 'test_linkcode' in tags: + import glob + + extensions.remove('sphinx.ext.viewcode') + extensions.append('sphinx.ext.linkcode') + + exclude_patterns.extend(glob.glob('*.txt') + glob.glob('*/*.txt')) + exclude_patterns.remove('contents.txt') + exclude_patterns.remove('objects.txt') + + def linkcode_resolve(domain, info): + if domain == 'py': + fn = info['module'].replace('.', '/') + return "http://foobar/source/%s.py" % fn + elif domain == "js": + return "http://foobar/js/" + info['fullname'] + elif domain in ("c", "cpp"): + return "http://foobar/%s/%s" % (domain, "".join(info['names'])) + else: + raise AssertionError() # -- extension API diff --git a/tests/test_linkcode.py b/tests/test_linkcode.py new file mode 100644 index 000000000..b4b333328 --- /dev/null +++ b/tests/test_linkcode.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +""" + test_linkcode + ~~~~~~~~~~~~~ + + Test the sphinx.ext.linkcode extension. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import os +from util import * + +@with_app(srcdir='(temp)', buildername='html', tags=['test_linkcode']) +def test_html(app): + app.builder.build_all() + + fp = open(os.path.join(app.outdir, 'objects.html'), 'rb') + try: + stuff = fp.read() + finally: + fp.close() + + assert 'http://foobar/source/foolib.py' in stuff + assert 'http://foobar/js/' in stuff + assert 'http://foobar/c/' in stuff + assert 'http://foobar/cpp/' in stuff From da4ba903a3f88310a76bc9a4826cd20575cec864 Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Sun, 11 Mar 2012 17:55:29 +0100 Subject: [PATCH 011/250] DOC: linkcode: fix up documentation a bit --- doc/ext/linkcode.rst | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/ext/linkcode.rst b/doc/ext/linkcode.rst index 9ae247563..a4ac394c7 100644 --- a/doc/ext/linkcode.rst +++ b/doc/ext/linkcode.rst @@ -7,15 +7,14 @@ .. versionadded:: 1.1 -This extension looks at your Python object descriptions -(``.. class::``, ``.. function::`` etc.) and adds external links to -code hosted somewhere on the web. The intent is similar to the +This extension looks at your object descriptions (``.. class::``, +``.. function::`` etc.) and adds external links to code hosted +somewhere on the web. The intent is similar to the ``sphinx.ext.viewcode`` extension, but assumes the source code can be found somewhere on the Internet. In your configuration, you need to specify a :confval:`linkcode_resolve` -function that returns an URL based on the name of a module and -the full name of the object. +function that returns an URL based on the object. .. confval:: linkcode_resolve @@ -29,9 +28,9 @@ the full name of the object. in. ``info`` is a dictionary with the following keys guaranteed to be present (dependent on the domain): + - ``py``: ``module`` (name of the module), ``fullname`` (name of the object) - ``c``: ``names`` (list of names for the object) - ``cpp``: ``names`` (list of names for the object) - - ``py``: ``module`` (name of the module), ``fullname`` (name of the object) - ``javascript``: ``object`` (name of the object), ``fullname`` (name of the item) Example: From 2f1f4c6be2dfc5caec235d4309d948b2a87bde8a Mon Sep 17 00:00:00 2001 From: Freek Dijkstra Date: Sat, 28 Apr 2012 21:03:30 +0200 Subject: [PATCH 012/250] relative_uri patch. Fixes #916. --- sphinx/util/osutil.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sphinx/util/osutil.py b/sphinx/util/osutil.py index 5becc37df..131c6b9c7 100644 --- a/sphinx/util/osutil.py +++ b/sphinx/util/osutil.py @@ -40,12 +40,20 @@ def relative_uri(base, to): return to b2 = base.split(SEP) t2 = to.split(SEP) - # remove common segments - for x, y in zip(b2, t2): + # remove common segments (except the last segment) + for x, y in zip(b2[:-1], t2[:-1]): if x != y: break b2.pop(0) t2.pop(0) + if b2 == t2: + # Special case: relative_uri('f/index.html','f/index.html') + # returns '', not 'index.html' + return '' + if len(b2) == 1 and t2 == ['']: + # Special case: relative_uri('f/index.html','f/') should + # return './', not '' + return '.' + SEP return ('..' + SEP) * (len(b2)-1) + SEP.join(t2) From 1bb4923da1aa1878af44c4608d63025e4fae9d3b Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Tue, 1 May 2012 15:13:06 +0900 Subject: [PATCH 013/250] support multibyte filename handling. https://bitbucket.org/birkenfeld/sphinx/issue/703 --- sphinx/builders/epub.py | 9 +++++++-- sphinx/cmdline.py | 16 ++++++++++++---- sphinx/config.py | 7 ++++--- sphinx/environment.py | 6 +++--- sphinx/util/osutil.py | 3 +++ tests/path.py | 12 ++++++------ tests/test_build.py | 20 ++++++++++++++++++++ 7 files changed, 55 insertions(+), 18 deletions(-) diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index b4c3b2776..c30fe735d 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -662,7 +662,12 @@ class EpubBuilder(StandaloneHTMLBuilder): zipfile.ZIP_STORED) for file in projectfiles: fp = path.join(outdir, file) - if isinstance(fp, unicode): - fp = fp.encode(sys.getfilesystemencoding()) + if sys.version_info < (2, 6): + # When zipile.ZipFile.write call with unicode filename, ZipFile + # encode filename to 'utf-8' (only after Python-2.6). + if isinstance(file, unicode): + # OEBPS Container Format (OCF) 2.0.1 specification require + # "File Names MUST be UTF-8 encoded". + file = file.encode('utf-8') epub.write(fp, file, zipfile.ZIP_DEFLATED) epub.close() diff --git a/sphinx/cmdline.py b/sphinx/cmdline.py index 9fc213716..e9d707656 100644 --- a/sphinx/cmdline.py +++ b/sphinx/cmdline.py @@ -22,9 +22,17 @@ from sphinx.errors import SphinxError from sphinx.application import Sphinx from sphinx.util import Tee, format_exception_cut_frames, save_traceback from sphinx.util.console import red, nocolor, color_terminal +from sphinx.util.osutil import fs_encoding from sphinx.util.pycompat import terminal_safe, bytes +def abspath(pathdir): + pathdir = path.abspath(pathdir) + if isinstance(pathdir, bytes): + pathdir = pathdir.decode(fs_encoding) + return pathdir + + def usage(argv, msg=None): if msg: print >>sys.stderr, msg @@ -65,7 +73,7 @@ def main(argv): try: opts, args = getopt.getopt(argv[1:], 'ab:t:d:c:CD:A:ng:NEqQWw:P') allopts = set(opt[0] for opt in opts) - srcdir = confdir = path.abspath(args[0]) + srcdir = confdir = abspath(args[0]) if not path.isdir(srcdir): print >>sys.stderr, 'Error: Cannot find source directory `%s\'.' % ( srcdir,) @@ -75,7 +83,7 @@ def main(argv): print >>sys.stderr, ('Error: Source directory doesn\'t ' 'contain conf.py file.') return 1 - outdir = path.abspath(args[1]) + outdir = abspath(args[1]) if not path.isdir(outdir): print >>sys.stderr, 'Making output directory...' os.makedirs(outdir) @@ -119,9 +127,9 @@ def main(argv): elif opt == '-t': tags.append(val) elif opt == '-d': - doctreedir = path.abspath(val) + doctreedir = abspath(val) elif opt == '-c': - confdir = path.abspath(val) + confdir = abspath(val) if not path.isfile(path.join(confdir, 'conf.py')): print >>sys.stderr, ('Error: Configuration directory ' 'doesn\'t contain conf.py file.') diff --git a/sphinx/config.py b/sphinx/config.py index 2012634e1..c020992b5 100644 --- a/sphinx/config.py +++ b/sphinx/config.py @@ -16,7 +16,7 @@ from os import path from sphinx.errors import ConfigError from sphinx.locale import l_ -from sphinx.util.osutil import make_filename +from sphinx.util.osutil import make_filename, fs_encoding from sphinx.util.pycompat import bytes, b, convert_with_2to3 nonascii_re = re.compile(b(r'[\x80-\xff]')) @@ -208,14 +208,15 @@ class Config(object): f.close() try: # compile to a code object, handle syntax errors + config_file_enc = config_file.encode(fs_encoding) try: - code = compile(source, config_file, 'exec') + code = compile(source, config_file_enc, 'exec') except SyntaxError: if convert_with_2to3: # maybe the file uses 2.x syntax; try to refactor to # 3.x syntax using 2to3 source = convert_with_2to3(config_file) - code = compile(source, config_file, 'exec') + code = compile(source, config_file_enc, 'exec') else: raise exec code in config diff --git a/sphinx/environment.py b/sphinx/environment.py index 5661c468a..ec3023905 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -41,7 +41,8 @@ from sphinx.util import url_re, get_matching_docs, docname_join, split_into, \ FilenameUniqDict from sphinx.util.nodes import clean_astext, make_refnode, extract_messages, \ WarningStream -from sphinx.util.osutil import movefile, SEP, ustrftime, find_catalog +from sphinx.util.osutil import movefile, SEP, ustrftime, find_catalog, \ + fs_encoding from sphinx.util.matching import compile_matchers from sphinx.util.pycompat import all, class_types from sphinx.util.websupport import is_commentable @@ -49,7 +50,6 @@ from sphinx.errors import SphinxError, ExtensionError from sphinx.locale import _, init as init_locale from sphinx.versioning import add_uids, merge_doctrees -fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding() orig_role_function = roles.role orig_directive_function = directives.directive @@ -1321,7 +1321,7 @@ class BuildEnvironment: def _entries_from_toctree(toctreenode, parents, separate=False, subtree=False): """Return TOC entries for a toctree node.""" - refs = [(e[0], str(e[1])) for e in toctreenode['entries']] + refs = [(e[0], e[1]) for e in toctreenode['entries']] entries = [] for (title, ref) in refs: try: diff --git a/sphinx/util/osutil.py b/sphinx/util/osutil.py index 5becc37df..8dc3b9d36 100644 --- a/sphinx/util/osutil.py +++ b/sphinx/util/osutil.py @@ -148,3 +148,6 @@ def find_catalog(docname, compaction): ret = docname return ret + +fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding() + diff --git a/tests/path.py b/tests/path.py index 8e9afeaa8..bd0552d70 100644 --- a/tests/path.py +++ b/tests/path.py @@ -16,16 +16,16 @@ from codecs import open FILESYSTEMENCODING = sys.getfilesystemencoding() or sys.getdefaultencoding() -class path(str): +class path(unicode): """ Represents a path which behaves like a string. """ if sys.version_info < (3, 0): def __new__(cls, s, encoding=FILESYSTEMENCODING, errors='strict'): - if isinstance(s, unicode): - s = s.encode(encoding, errors=errors) - return str.__new__(cls, s) - return str.__new__(cls, s) + if isinstance(s, str): + s = s.decode(encoding, errors) + return unicode.__new__(cls, s) + return unicode.__new__(cls, s) @property def parent(self): @@ -193,4 +193,4 @@ class path(str): __div__ = __truediv__ = joinpath def __repr__(self): - return '%s(%s)' % (self.__class__.__name__, str.__repr__(self)) + return '%s(%s)' % (self.__class__.__name__, unicode.__repr__(self)) diff --git a/tests/test_build.py b/tests/test_build.py index 5f24f89ac..ae3f29211 100644 --- a/tests/test_build.py +++ b/tests/test_build.py @@ -10,6 +10,7 @@ """ from util import * +from textwrap import dedent def teardown_module(): @@ -61,3 +62,22 @@ else: @with_app(buildername='singlehtml', cleanenv=True) def test_singlehtml(app): app.builder.build_all() + +@with_app(buildername='html', srcdir='(temp)') +def test_multibyte_path(app): + srcdir = path(app.srcdir) + mb_name = u'\u65e5\u672c\u8a9e' + (srcdir / mb_name).makedirs() + (srcdir / mb_name / (mb_name + '.txt')).write_text(dedent(""" + multi byte file name page + ========================== + """)) + + master_doc = srcdir / 'contents.txt' + master_doc.write_bytes((master_doc.text() + dedent(""" + .. toctree:: + + %(mb_name)s/%(mb_name)s + """ % locals()) + ).encode('utf-8')) + app.builder.build_all() From 48128c7b9b8eff5de97c1be61d071fef3a2bb1ea Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 2 May 2012 12:05:41 +0900 Subject: [PATCH 014/250] * fix test for Windows: test failed by test-code problem depends on os.sep. --- tests/test_build_html.py | 3 ++- tests/test_build_latex.py | 3 ++- tests/test_build_texinfo.py | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/test_build_html.py b/tests/test_build_html.py index a38806a86..6812257b6 100644 --- a/tests/test_build_html.py +++ b/tests/test_build_html.py @@ -319,7 +319,8 @@ def check_static_entries(outdir): def test_html(app): app.builder.build_all() html_warnings = html_warnfile.getvalue().replace(os.sep, '/') - html_warnings_exp = HTML_WARNINGS % {'root': re.escape(app.srcdir)} + html_warnings_exp = HTML_WARNINGS % { + 'root': re.escape(app.srcdir.replace(os.sep, '/'))} assert re.match(html_warnings_exp + '$', html_warnings), \ 'Warnings don\'t match:\n' + \ '--- Expected (regex):\n' + html_warnings_exp + \ diff --git a/tests/test_build_latex.py b/tests/test_build_latex.py index 4e1e9f70c..2fa0698b8 100644 --- a/tests/test_build_latex.py +++ b/tests/test_build_latex.py @@ -42,7 +42,8 @@ def test_latex(app): LaTeXTranslator.ignore_missing_images = True app.builder.build_all() latex_warnings = latex_warnfile.getvalue().replace(os.sep, '/') - latex_warnings_exp = LATEX_WARNINGS % {'root': re.escape(app.srcdir)} + latex_warnings_exp = LATEX_WARNINGS % { + 'root': re.escape(app.srcdir.replace(os.sep, '/'))} assert re.match(latex_warnings_exp + '$', latex_warnings), \ 'Warnings don\'t match:\n' + \ '--- Expected (regex):\n' + latex_warnings_exp + \ diff --git a/tests/test_build_texinfo.py b/tests/test_build_texinfo.py index c626c976b..59d03e030 100644 --- a/tests/test_build_texinfo.py +++ b/tests/test_build_texinfo.py @@ -41,7 +41,8 @@ def test_texinfo(app): TexinfoTranslator.ignore_missing_images = True app.builder.build_all() texinfo_warnings = texinfo_warnfile.getvalue().replace(os.sep, '/') - texinfo_warnings_exp = TEXINFO_WARNINGS % {'root': re.escape(app.srcdir)} + texinfo_warnings_exp = TEXINFO_WARNINGS % { + 'root': re.escape(app.srcdir.replace(os.sep, '/'))} assert re.match(texinfo_warnings_exp + '$', texinfo_warnings), \ 'Warnings don\'t match:\n' + \ '--- Expected (regex):\n' + texinfo_warnings_exp + \ From 7e56be6f62d48354b8c91f9d0fdb0e2f48d5df97 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 2 May 2012 12:06:29 +0900 Subject: [PATCH 015/250] * fix for Python2.5: test failed by using os.path.relpath that introduced at Python-2.6. --- sphinx/util/osutil.py | 3 ++- sphinx/util/pycompat.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/sphinx/util/osutil.py b/sphinx/util/osutil.py index 5becc37df..c5fee9d93 100644 --- a/sphinx/util/osutil.py +++ b/sphinx/util/osutil.py @@ -136,8 +136,9 @@ else: def safe_relpath(path, start=None): + from sphinx.util.pycompat import relpath try: - return os.path.relpath(path, start) + return relpath(path, start) except ValueError: return path diff --git a/sphinx/util/pycompat.py b/sphinx/util/pycompat.py index 9e081b02f..c2c6fe8b1 100644 --- a/sphinx/util/pycompat.py +++ b/sphinx/util/pycompat.py @@ -82,6 +82,10 @@ if sys.version_info >= (2, 6): except ImportError: from itertools import izip_longest as zip_longest + import os + relpath = os.path.relpath + del os + else: # Python < 2.6 from itertools import izip, repeat, chain @@ -114,6 +118,26 @@ else: except IndexError: pass + from os.path import curdir + def relpath(path, start=curdir): + """Return a relative version of a path""" + from os.path import sep, abspath, commonprefix, join, pardir + + if not path: + raise ValueError("no path specified") + + start_list = abspath(start).split(sep) + path_list = abspath(path).split(sep) + + # Work out how much of the filepath is shared by start and path. + i = len(commonprefix([start_list, path_list])) + + rel_list = [pardir] * (len(start_list)-i) + path_list[i:] + if not rel_list: + return curdir + return join(*rel_list) + del curdir + # ------------------------------------------------------------------------------ # Missing builtins and codecs in Python < 2.5 From 733854e121c05281acc3efd3c42020414282b842 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 2 May 2012 12:07:04 +0900 Subject: [PATCH 016/250] * fix for Python2.5: test failed by using inspect.ArgSpec that introduced at Python-2.6. --- sphinx/util/inspect.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sphinx/util/inspect.py b/sphinx/util/inspect.py index b5c3db598..ba3fa9681 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -45,7 +45,10 @@ if sys.version_info >= (2, 5): del func_defaults[i] except IndexError: pass - return inspect.ArgSpec(args, varargs, varkw, func_defaults) + if sys.version_info >= (2, 6): + return inspect.ArgSpec(args, varargs, varkw, func_defaults) + else: + return (args, varargs, varkw, func_defaults) else: getargspec = inspect.getargspec From b948dfc7e0835ffaadc8faf69d982641d4c8a55f Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 2 May 2012 15:55:11 +0900 Subject: [PATCH 017/250] fix for Python3: Python3 open() use 'rt' mode by default, and decoding by locale.getpreferredencoding(). In sphinx test, html output encoded by 'utf-8' but reading with syste-locale-setting-encode that cause UnicodeDecodeError. --- tests/test_build_html.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_build_html.py b/tests/test_build_html.py index 6812257b6..62bd5a88b 100644 --- a/tests/test_build_html.py +++ b/tests/test_build_html.py @@ -329,7 +329,7 @@ def test_html(app): for fname, paths in HTML_XPATH.iteritems(): parser = NslessParser() parser.entity.update(htmlentitydefs.entitydefs) - fp = open(os.path.join(app.outdir, fname)) + fp = open(os.path.join(app.outdir, fname), 'rb') try: etree = ET.parse(fp, parser) finally: From 33167797a0fa2e963b21356ebd12877722b6e41d Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Thu, 3 May 2012 10:15:21 +0900 Subject: [PATCH 018/250] fix for Python3.1: Python 3.1 can't proceess '\r' at parser; `parser.suite("print('hello')\r\n")` cause error. --- sphinx/highlighting.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py index 2f61c1ef1..f4e6f36a1 100644 --- a/sphinx/highlighting.py +++ b/sphinx/highlighting.py @@ -143,6 +143,12 @@ class PygmentsBridge(object): # just replace all non-ASCII characters. src = src.encode('ascii', 'replace') + if sys.version_info < (3, 2): + # Python 3.1 can't proceess '\r' as linesep. + # `parser.suite("print('hello')\r\n")` cause error. + if '\r\n' in src: + src = src.replace('\r\n', '\n') + if parser is None: return True From e091ae2bf7ca3980b9317820e31044d3ce60a82e Mon Sep 17 00:00:00 2001 From: Andi Albrecht Date: Sun, 1 Jul 2012 15:28:39 +0200 Subject: [PATCH 019/250] Set default background color in header for agogo theme. This allows to header to grow larger than the height of the background image. --- sphinx/themes/agogo/theme.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/themes/agogo/theme.conf b/sphinx/themes/agogo/theme.conf index 3fc88580f..3052aca30 100644 --- a/sphinx/themes/agogo/theme.conf +++ b/sphinx/themes/agogo/theme.conf @@ -10,7 +10,7 @@ pagewidth = 70em documentwidth = 50em sidebarwidth = 20em bgcolor = #eeeeec -headerbg = url(bgtop.png) top left repeat-x +headerbg = #555573 url(bgtop.png) top left repeat-x footerbg = url(bgfooter.png) top left repeat-x linkcolor = #ce5c00 headercolor1 = #204a87 From 1dbb40cb5c05bef9a2b504f26e6f635dedeb7265 Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Thu, 26 Jul 2012 00:40:40 +0900 Subject: [PATCH 020/250] Use term in description list as translation message Here is a .rst that reproduces the problem fixed by this changes: term-word description-paragraph "description-paragraph" is extracted as translation message by "sphinx-build -b gettext" but "term-word" isn't. It's because nodes.term node doesn't have source information. Source information should be added by Docutils instead of Sphinx. A patch that fix this problem in Doctuils had been submitted: https://sourceforge.net/tracker/?func=detail&aid=3548418&group_id=38414&atid=422032 This changes are workarond to work with docutils-0.9.1 or earlier. --- sphinx/util/nodes.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py index dbedb7f2f..8b8dd2bc5 100644 --- a/sphinx/util/nodes.py +++ b/sphinx/util/nodes.py @@ -43,6 +43,14 @@ IGNORED_NODES = ( def extract_messages(doctree): """Extract translatable messages from a document tree.""" for node in doctree.traverse(nodes.TextElement): + # workaround: nodes.term doesn't have source, line and rawsource + # It should be fixed in Docutils. There is a patch for it in Docutils + # tracker: https://sourceforge.net/tracker/?func=detail&aid=3548418&group_id=38414&atid=422032 + if isinstance(node, nodes.term) and not node.source: + definition_list_item = node.parent; + node.source = definition_list_item.source + node.line = definition_list_item.line - 1 + node.rawsource = definition_list_item.rawsource.split("\n", 2)[0] if not node.source: continue # built-in message if isinstance(node, IGNORED_NODES): From 8e96fc71d4b78ca198c0d854a046d9f409727e4f Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Thu, 26 Jul 2012 06:49:56 -0500 Subject: [PATCH 021/250] texinfo: Handle duplicate domain indices. Reported by Takafumi Arakaki at https://bitbucket.org/jonwaltman/sphinx-info/issue/1/error-this-node-python-module-index-has --- sphinx/writers/texinfo.py | 44 +++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py index 5799e0234..198d1e061 100644 --- a/sphinx/writers/texinfo.py +++ b/sphinx/writers/texinfo.py @@ -233,30 +233,31 @@ class TexinfoTranslator(nodes.NodeVisitor): """Generates a unique id for each section. Assigns the attribute ``node_name`` to each section.""" + + def add_node_name(name): + node_id = self.escape_id(name) + nth, suffix = 1, '' + while node_id + suffix in self.written_ids or \ + node_id + suffix in self.node_names: + nth += 1 + suffix = '<%s>' % nth + node_id += suffix + self.written_ids.add(node_id) + self.node_names[node_id] = name + return node_id + # must have a "Top" node self.document['node_name'] = 'Top' - self.node_names['Top'] = 'Top' - self.written_ids.update(('Top', 'top')) + add_node_name('Top') + add_node_name('top') # each index is a node - for name, content in self.indices: - self.node_names[name] = name - self.written_ids.add(name) + self.indices = [(add_node_name(name), content) + for name, content in self.indices] # each section is also a node for section in self.document.traverse(nodes.section): title = section.next_node(nodes.Titular) name = (title and title.astext()) or '' - node_id = self.escape_id(name) or '' - assert node_id and name - nth, suffix = 1, '' - while node_id + suffix in self.written_ids: - nth += 1 - suffix = '<%s>' % nth - node_id += suffix - assert node_id not in self.node_names - assert node_id not in self.written_ids - section['node_name'] = node_id - self.node_names[node_id] = name - self.written_ids.add(node_id) + section['node_name'] = add_node_name(name) def collect_node_menus(self): """Collect the menu entries for each "node" section.""" @@ -371,7 +372,11 @@ class TexinfoTranslator(nodes.NodeVisitor): for entry in entries: name = self.node_names[entry] # special formatting for entries that are divided by an em-dash - parts = reg.split(name, 1) + try: + parts = reg.split(name, 1) + except TypeError: + # could be a gettext proxy + parts = [name] if len(parts) == 2: name, desc = parts else: @@ -450,8 +455,7 @@ class TexinfoTranslator(nodes.NodeVisitor): self.builder.docnames) if not content: continue - node_name = self.escape_id(indexcls.localname) - self.indices.append((node_name, + self.indices.append((indexcls.localname, generate(content, collapsed))) self.indices.append((_('Index'), '\n@printindex ge\n')) From 98140973156bdfbef7ca63bfa8cf1d7afc95f5dc Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 29 Jul 2012 19:27:28 +0200 Subject: [PATCH 022/250] Fix test_env by supplying a dummy imgpath to the HTML builder. --- tests/test_env.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_env.py b/tests/test_env.py index e62db33bd..2f75187fb 100644 --- a/tests/test_env.py +++ b/tests/test_env.py @@ -54,6 +54,7 @@ def test_images(): tree = env.get_doctree('images') app._warning.reset() htmlbuilder = StandaloneHTMLBuilder(app) + htmlbuilder.imgpath = 'dummy' htmlbuilder.post_process_images(tree) image_uri_message = "no matching candidate for image URI u'foo.*'" if sys.version_info >= (3, 0): From a43dc68f016942c4fefbc08c55d433498607599a Mon Sep 17 00:00:00 2001 From: Dmitri Lebedev Date: Sun, 12 Aug 2012 21:11:39 +0700 Subject: [PATCH 023/250] added and corrected some Russian translation strings --- sphinx/locale/ru/LC_MESSAGES/sphinx.po | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.po b/sphinx/locale/ru/LC_MESSAGES/sphinx.po index b6374d813..ec68e4dfb 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po @@ -58,11 +58,11 @@ msgstr "%d %b %Y" #: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" -msgstr "Словарь-указатель" +msgstr "Алфавитный указатель" #: sphinx/builders/html.py:293 msgid "index" -msgstr "словарь" +msgstr "указатель" #: sphinx/builders/html.py:353 msgid "next" @@ -78,7 +78,7 @@ msgstr " (в " #: sphinx/directives/other.py:136 msgid "Section author: " -msgstr "Автор секции: " +msgstr "Автор раздела: " #: sphinx/directives/other.py:138 msgid "Module author: " @@ -630,7 +630,7 @@ msgstr "© Copyright %(copyright)s." #: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." -msgstr "Дата последнего обновления: %(last_updated)s." +msgstr "Обновлено: %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format @@ -638,7 +638,7 @@ msgid "" "Created using Sphinx " "%(sphinx_version)s." msgstr "" -"При создании использован Sphinx " +"Создано с помощью Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 @@ -666,7 +666,7 @@ msgstr "следующая глава" msgid "" "Please activate JavaScript to enable the search\n" " functionality." -msgstr "Для выполнения поиска необходима поддержка JavaScript в браузере." +msgstr "Для работы поиска включите JavaScript в браузере." #: sphinx/themes/basic/search.html:29 msgid "" @@ -675,10 +675,10 @@ msgid "" " function will automatically search for all of the words. Pages\n" " containing fewer words won't appear in the result list." msgstr "" -"Эта форма предназначена для поиска по всем разделам настоящей " -"документации. Введите искомые слова в текстовое поле и нажмите кнопку " -"«искать». Обратите внимание: найдены будут только те страницы, в которых " -"упомянуты все указанные слова. Страницы, в которых встречается только " +"Здесь можно делать поиск по всем разделам этой " +"документации. Введите ключевые слова в текстовое поле и нажмите кнопку " +"«искать». Внимание: будут найдены только те страницы, в которых " +"есть все указанные слова. Страницы, где есть только " "часть этих слов, отобраны не будут." #: sphinx/themes/basic/search.html:36 @@ -691,7 +691,7 @@ msgstr "Результаты поиска" #: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." -msgstr "Результатов по вашему запросу не найдено." +msgstr "Страниц по вашему запросу не найдено." #: sphinx/themes/basic/searchbox.html:12 msgid "Quick search" @@ -723,7 +723,7 @@ msgstr "Изменения в библиотеке" #: sphinx/themes/basic/changes/versionchanges.html:23 msgid "C API changes" -msgstr "Изменения в C API" +msgstr "Изменения в API C" #: sphinx/themes/basic/changes/versionchanges.html:25 msgid "Other changes" @@ -744,16 +744,16 @@ msgstr "Снять выделение" #: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" -msgstr "" +msgstr "Развернуть боковую панель" #: sphinx/themes/default/static/sidebar.js:82 #: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" -msgstr "" +msgstr "Свернуть боковую панель" #: sphinx/themes/haiku/layout.html:26 msgid "Contents" -msgstr "" +msgstr "Содержание" #: sphinx/writers/latex.py:177 msgid "Release" @@ -762,7 +762,7 @@ msgstr "Выпуск" #: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 #: sphinx/writers/texinfo.py:589 msgid "Footnotes" -msgstr "" +msgstr "Сноски" #: sphinx/writers/latex.py:676 msgid "continued from previous page" @@ -771,7 +771,7 @@ msgstr "" #: sphinx/writers/latex.py:681 #, fuzzy msgid "Continued on next page" -msgstr "Полный алфавитный указатель на одной странице" +msgstr "Продолжается на следующей странице" #: sphinx/writers/text.py:437 msgid "[image]" From 2dc5bec4dfa732740ad76df81e2e99e7fbfcbe6c Mon Sep 17 00:00:00 2001 From: Dmitri Lebedev Date: Sun, 12 Aug 2012 21:46:11 +0700 Subject: [PATCH 024/250] compiled Russian translation strings --- sphinx/locale/ru/LC_MESSAGES/sphinx.mo | Bin 10794 -> 10263 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo index 593350d31ce5c00185d0914e0baed6a08f056366..016c808193ae4ebcea1afa9299f3cd08ef6c0866 100644 GIT binary patch delta 3516 zcma*od2AGA7{~E; zq3&BoWRQ60n+C(H@d4Ig1Pp2iFC56r-9de!wKkV9q?>i8_o z#cNRat;E3?#ew()@@HcFWHY{bjh#Up=)y_Zjd@tW=mT&LYNkt3MXANhaJApwkNlZ~ z{Pe=(sQcc*iTEWdv0P@UL<&*;lwu#oH}lz9h}U6H+>2D%?8hM($H~}*dIV|Ija`$4 zN-TsXV9Xd)g(8f`n5Gm}fpSd3TEAU~JY};Hqw1iU9d*0|mHDH-&!RdwiXn7SWBrU2 z$@HN9YGnHtRqDa0XFuF;7y0KWp%&pZ|NJ6UKewPN+JMZ#Y|Enl%H#qzKD!z;;0Ip zz#iCzn#qT#1Ww{e{Mv7)Q7#RfgBM~Lb^qn4{>oAPSEDN47-dH{tVgZR?Wh}`MkTZ# zb>TtOfJacT-*MDh`Np@~KYtdL;Gd|9CDFOA>yPU10^dAT1)_!Qs3cQR7cNG<4L6|@ z*?@Xxn^7IN;Cn1Ki%Mh}D^3Y+L$x194b@)m1zz?6{=E8Q1{g%U7LqP)L%1x$vYEmvjW3{P{sU_91(^Oq9Et97Am9I=vMP5o!nT6`{qsiI_~(5K%rt<|cx5=6$DU z<8Y#i(8lBSHoXn39TW6giJxmA-EZIETk5+MdlCBZXj@BMMJ!i?t(MrL0$t6{Z92lH zuiivrHK9-M`CEv_GNRZ&n0nqxt?WzBYx5;HVZWV;(}~N8n~4TOub@6;SLk2bmByav zQ)VajJ!2Q74vno#4FqDZr$v%u$(c0)+n807T;EW++;(Ku*d^IBZF_ccN^L_`ZIk^i zyVy?689Zdo`uggX!OH6D+O=zg>l%ZVt5yXY8f(_Cs$FYsPJZmIoU)|YgxsotePdu@ z?3aPd0(Rfv(Nr`_G`9Cf$4Til&N=VhnUIZU*1pe5+M>a;pX zopz_g-DyV*4NvEWPUnDk%R%o{+-WzZjkn#|RKL7#o$*c|;sV{(8FZV~L#K1Z>2$Zb zJKYxhd3vdJhkhG%_HfCe|3A2TrboA#k<v}JR zAQNil^pPNwZFOvTSXxi_A$N<@Y3B?Zn|hcDwzv;)L7TmMSmo%)=rB&#ng%nRN?qKo z&H)uE$e~u}6>qSk?hc!qH@P?UXx6B*x68Szz)y9W3-nWPk_F5Br504z-c9YCZ5PKPS)+QQ~65*>6(hF?M>Ux zEx6aZ1;y!4al6itx_iGJII^T4O*&!*8uzeWJ@PAiEO&t2Gpag+gNMCdD4Y7RV+t#J cdk>B5?4H6Ec2M|YdvkcA-5Z`_e+rlU1Bv};J^%m! delta 3921 zcmb`{eQ;FO8OQOn5CRD#kdP2UNODa=0+CmFHBu^Khrwb%3l5z&qf2s0R(G@M-Ayt~ zwabgevDl`}r7sp0nJLtw2(qk12ocL4tuNJkp`EJjpxEM!BQn+6&R8AW?{D|oP96QD zon|)sx%b?2p7WgN+_OJgdvIOqd}-bf41at0pUVIHdAj@e-wOrCjN|s#I0|3II(!}Z zn307!i%`!ia3WS?3C_bZT!G_p11eq@78#Q=yjU_8_W z=W!CghZC@XAR0FXEu4WGe*^L{U*}5+ccJ<_Si$^eI~NML2dCg+oQ%(*GW}!l{Lfg) zeIAXAum)>!JcH*gug9o#pwnj+>m^SKy}%TWVY;R3uBmFaF& zV*62nPNM=pi)-*4=3_m}rx>OgmB>O|j5ndS=3eAu2KdtWhcIPA#yrA>O8Ij(h*;({ zsvBzleH0K0pQd7!`O7St{}3zy{R#7Q6ymk*=l(S-ja2+<$ih^Q+-O8kG4# z)ShL6`(L6aJc~-~cc=aF!q&o80^y^AWXDa~!oR8&H<0vDnBe-Y_wzKp6=8*1WC9Eshig*hoM zlu17}qVBU92JMGX6J$^c4P!N)Lj`^pHPMHtiHoSawxklZ;#yQ?W}+rsg&Nn2ikI5J zh2Hj9@L&gO!tbL>et+Q4P=Pb3gioS=2hIfTZ=w>v6!@3GzoYtxm`w>3pb{%a`ln14 z7n-mRRpKjy`xaz-&5EFX9jf&0sFx{)3OIn8csJ^J?g{QQsEQ1sR{Sf}g3hAGy^d!? z?EghBw30!NfL8c>)cpliVtExgi%`!eA&W9oQKx1uYT}ismokh^*pEtdFKXh$s0Ext zjei9zbpGGrLVGxheb9gkY``X*jjK_Czlo~QF0}ArWT<%tHU1UUO5aA-Wd4d*VjvyfOD}8wSw>AG(3pfA`i8v7chdCu^u9@kp~gRtSC25}x454B@mB5!$wn>k9*g>G;4lsJG0&qieGB!&@)0Vr(fo`p#yPkU zJ5d#Q5Wj?HP$ezk#Ze^}1h%5$ccB*AiyF5BwUEbBTxhRe2pTS+CJs?2?fE!VLUlL? z7ve0mQI&C#xlJA~j3#bG#k&?Y@p{x2Y(&NR7ApQOyb4nf1Pw2t0=*hM_y`qn4(aNp zTow3LoXLFzHPH{T1|LNo!{<;F_^7S?1F}ozBCf^}jk$hnkcy-~HP%GMpn&<##SAt65H5`j?qQ<|6+QLwC?sWu(Wn)Rcl1W>gtdvT{aumvE(UbiRwQAC`@)f^qAZ<5U!wtE ziT66~cCLp8OiN^+rLQlVl~=x|&vyDEc7IC{GutiQQ(}ikbvg0=gnO>ErHmCM+RWD? zv2dr22?caZCUz`okA@QoD`qFV;vI&ZlacOTyTjV##A8;EWA{bky$P#_QKloD44Z$g z+f7cqZVJmzB*M;SD``71)9Hj`v9Mz$<9FEZv55;x!|hJo#O&Bc+X2nszBBQv;nMs>M|IKdIPoABx-HO`j8zfzuOxozz~<-(_CZ-af+VD_3huo{V6v!b+Ws*x@JPQ zX)D8q{Q>`8FXJYwXBB9g6NDdfAFB>u^N{xhL5|R8kpGOutV)OQSu-t`f_P6c3z7Yu z7X7z-$NcU7Hg|E&;!HlQyTr9ZeLA{+g4Lre$;1bWk^;>_}<3-fID2Xzj&W_ zGPgc|i+|rNx7NBQeYCbbG;en{5iN|2x6&!MxQv(fhAl=sK`yF`9+0I!kbc>!2z~Y` zaW7x7d6jq6-;`4Yd~$lvHQxT|)4Q~3(Wg)E ZH<}iH_UYZ<)KaQ*`=7_xJ>PWoKLJ;IV2%I) From 1a3b9849e97b27f6d352be6344f7b54ba79bd3ea Mon Sep 17 00:00:00 2001 From: Dmitri Lebedev Date: Sun, 12 Aug 2012 21:59:01 +0700 Subject: [PATCH 025/250] re-generated .py and translated more strings in Russian --- sphinx/locale/ru/LC_MESSAGES/sphinx.mo | Bin 10263 -> 10872 bytes sphinx/locale/ru/LC_MESSAGES/sphinx.po | 172 ++++++++++++++----------- 2 files changed, 100 insertions(+), 72 deletions(-) diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo index 016c808193ae4ebcea1afa9299f3cd08ef6c0866..4bdda86bf99da0f657727d5ca6153abfdc365799 100644 GIT binary patch delta 3976 zcmaKtdvKK18Hdjj5J-U#A_xTHN0UG_EF>WaY-7xZTnOX>NdSq^x+F`oHpwQtxmc|( z0fRLu#ky8$r_iDH;vY^MvIW9Ll$nmxPObB;L!C|)rgb`{9b2W-*0D2+eSW)Niglcx z$#0)?eb0N|_k1VMZvCJ+a&_L+ZyCxcT7vqf8uJo-bp}6_UwqD(S@4%|8hitO9=-)< z!jB!!WKufq40tQdg=x?O`7@jOnGJVBmKZ-|JYssO%%Nil%D|J!0rP#R1>-OSz6=+@ z%Wy7y2WtL@PzL8PS^bOQZ7?5d-A1?=?t}|r2(rYCCdMPi9Hp{|ju+rv@D+GF{0J7n zrFfSK>*0L(0MyC%Lj`FBmcpphejT#Zya}hnzd)_~J1mCNIkp@vfs5JS)KQV44k*LD zumL^{Z-Kvpsql3uN3Oti@ZV4=Da0DK%{r*{RkH3fW-C<0wh<;d)BzQd0XPMYz=%2y zQz7l<1eAdvK^Y!{^8B>JSE1&=4VS_9AwHOe^O7OWgKDpJ+Lcg_H$tYGJx)6awckVY z$iF;`(4hz%hT8BMXW|P`m+}l$4ll!U_#V`Wi||Id^g>0d9xCM9q3*;UryX#{d!a7p zgUekkGN2q-2$w?(%CTyw z_4Uqpi__j4aXPx8HXMNb8TBuPPeW}q4z=+GC_}G7rRaB15&Avk&wRv>ZuvaIsCD^J zcGp79FNJcj0_ro4)KZa$L5Bm*gh!xGGz=Bu5oi2aD1*lx{unA^V^9&i1ZD3E)K~RK zC`WEUrFsT8Qg#=>G8g&Jq#{pt^U=z~2vmC*YNO{Jo`ky1=b#M7AvVoBa0PU6Y+b%P zpf=h75YU2?ogFk@U_$*WkUV$?7Hq-|Hf<;i?sJ#ZtPAOFX{ZQ+o zP>%mJLPfXsWoN*K+UT#4=o;7Zq#+CHYsiPB&lJN7xD9fB%rj2^Nyz;*uR+8Ni51g5o%vlYTfnKN$jzO&-hl<1{s1sg> zW$-$j0SoU)M$Y4~8Ztj(nyF~xc4uH1%HyY?Hh2yyhZArO{4G=pX5E>5Vi!R!82b#!^x)Jzhqd&5DFvxgHew4Z9jsVkVz_m>ha^%>KjMB-UhRd0mee%;u;Xb^QF-Ta+sHB#wD z%Mhtg6z-n6AI(I30A>q%3{6GJ!udz3RXELJsE25i)2@g5ob-P0Mkz>T1bq$h-k2Te zZuH6G`$Xdb>MNXfEo?+(XbPGpqaLJZQ{Q_KsoaOE61C)K=u{J*;sA|uv;ply>Bx^% zmY^K;MRa@YZ>jfAsV(U!EcJGFT3x}m{!V|`+7}F2gB^j^4y!fT=C=Z2%QxT)bo%yo z`b$b$-KuKQs{V4|*J%iD|K(^kc5#wqR>`kGZcs z71uxhdn16{s$ztfkf(-+n@(e#YAC9T2kzCd@szs=eg3U*mNA^$)i*dMlfSQP8a zSmTOp^={nat**3oR5mu%G}Nay`g?+*K6hQXJ<#SZ?{5#gn}Z%Jb!$Vjdt=D&>k9)xZOZoMs%YMV?3jPS{FJ5kllFN0fPFE( zKR#rivnT9Rmi&489luyJNDM1L6_@%v?a6f|L+}pI&;>P6w9)r-&;D8U|!ba zV(cebg5zV(%`SJH=&1Z)7iV9gVKc$(()Mj&Tef^Spg3 z+MIJNg4Y-AbDZvieG2~%*kkcS*gnFoAui|b^YL%6(E$Y~IpAEa&mLqIGv(Sr`$ZXc zX8&(z!gkXAv`b%18VO#?D%k-f3F=P<%9+ Zx;!tIy8N^&x-)y;^n}yo?dpmR{{h=!r@R0F delta 3429 zcmZ|QeQ;D)8OQOH7eJEm76Oq{$PIKMKz7}`q=AHN2uXmJhC*IIgj(5P(%mG5 z8e9^mjzDd-JDm<49d$aQ(lVtiq>)0^8T60pICq_lc5Knw`Zi7{)^R%4cfY^g%S`;k zGkNxN&b{}%+~=Nq^I_Msdy~H`EqumM#)-R$>Ox~KVZ%rGp}b#YObPxOXW_qb6&4m7 zGZ)vo+PH}J7A(WvxB$CR{o^0zaHjn)6iVbKu*k0VZ=N%w8Jz67_U z?(`5UDPe5HnA^UD{Fw=U=HM+M<*I$q%nF8{!_Ci$KLM_~j{F%*edlzcLeW-;UL}j3F5&2h#M>wF( zH;PKpd2Gh3s5|{DYJ%CNxeP5vrTQ+^vtQ-5eeU^M)FuqN=Q~j2JdDa{KXMP|Oey)- zN}l6@d>%F6i^!a25|yFXu>hw~ck%{m0k?4t{?=`mkS zkffpx!>HYP7S-W-)PgRdE}TG3cmwtN-9qh^-@8t`=RZI#@L#Bm;UUyQMo`b}G-}`{@uzII6lx(y*>PIn8C3fz)I?WYUq$}REq*la zo2WhZ0j|~iU(Cy@O|%iSyB4*ecH|~ZKk{eB_)!Yaqpp7e@4;8mhi{_>UO*bD8V~CF zAhK4o2RC4kd;W{))BFD|D(gA%b5w_XmZ_DN@nfS8Yw6@ zuEsDsSvPV9*&gN_sN<8^if>`H-v3IjA{FLA)JjKCsXvF^_zY@-4^a!4#jDbc9_+_H z)cK#GAK!J`W$eH|@~A3tAID4Rta-XoH*^;DRW#qHqTTuv)Joq&y_Ww$bttlOAD{r< zOZylq17CCfAu5CKAvbTz`B+FBHU0yrOdUY=iy%Xrrz*+6?)WA5z%A6ozdgafbDn~Ic2V(CYnNxGmV4&A$L;SyFY1GIDoI7De*$%f z7f}PgflB?msE);aWi;_7RL3^dogG3gIEGDl7PXKcp)xV$`fJqn)2R9K7+mL*6;!ms zYSaWl)U)ZpjTlE=cmcJLG-?6ALOp_MoQ(^svj2m!ui`e^9mGjOWe1@R7bgmcCZdbr zhLhRVYCx6!#Ac$I&?+A$^bHsy^iJm!cS?xLVS*==U9jH$EyQW!5#lkTp14yEQrS!B zWJywm|31vy;Kn^pCvxqi=;j`J*UO7gn zC|h^RgStQ;jZe8pj-YnDN?(rb?+JdjFI4=*ae_VdKShsEdqHo+dSaM(l;FvjAQ2_B zIZqLrh#n%zN60)xu+OsJ=~i4tbQ3B(-fYp^z}_)dww3$ogn4fJ6Rs_;hj0#|506TM zc!20tgAyjjm7v{J26cp@uU-uiBlPK=St@B9B?9ij;u$Bkvm0i#`I4J;ZhH}KC3X^@ zB>D-xg8Go%r|o!u`Uk}a^3%uWR~M#VEd6p`VWdCQn;I?aNtG@sOD|foGOwg_urCrj zVflTv-FB*RX?b${?rrzCHEnBc?bzPgS+sXgm$xMz4h=;HV&2x!P`KU-_-)(kuk!|M z%l6m%Yd81^U@yD=EZovO0^ z4Z#}KtFqTM*nVqtG}niV{Ojms(<$(D`Mm|hLq}7a%U3Vk8IFbHB&WyQe6rqZ4t0m4 zWVFs#n?6{+v>^5NykN?+d{x0ar!S;;E`Ky{&ehCm=QZc$)OYW;=e7(Co{UF&`-al< zR+QwYR#coxU99+Ay2jd8kiM{be*XTjPrHphHqy3s|<6U)2}#}Gvk>j zEN3z^mU*0mSDl-gbIx}xF23em=is-aV1o^URw{_gq8e5&g3S?8w4NqN@(E|sYA iqz9`e@>V*pSW2UyQulp~Rb;{iU diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.po b/sphinx/locale/ru/LC_MESSAGES/sphinx.po index ec68e4dfb..2a82d89b3 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po @@ -1,21 +1,21 @@ -# Russian translations for Sphinx. -# Copyright (C) 2008 ORGANIZATION -# This file is distributed under the same license as the Sphinx project. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. # +#, fuzzy msgid "" msgstr "" -"Project-Id-Version: Sphinx 0.6b1\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2011-09-21 10:06+0200\n" -"PO-Revision-Date: 2011-09-21 10:14+0200\n" -"Last-Translator: alexander smishlajev \n" -"Language-Team: ru \n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-08-12 21:48+0700\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.6\n" #: sphinx/config.py:81 #, python-format @@ -24,21 +24,22 @@ msgstr "" #: sphinx/environment.py:119 sphinx/writers/latex.py:190 #: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 +#: sphinx/writers/latex.py:191 sphinx/environment.py:113 #, python-format msgid "%B %d, %Y" msgstr "%d %B %Y" -#: sphinx/environment.py:1625 +#: sphinx/environment.py:1625 sphinx/environment.py:1638 #, python-format msgid "see %s" msgstr "" -#: sphinx/environment.py:1628 +#: sphinx/environment.py:1628 sphinx/environment.py:1641 #, python-format msgid "see also %s" msgstr "" -#: sphinx/roles.py:175 +#: sphinx/roles.py:175 sphinx/roles.py:176 #, fuzzy, python-format msgid "Python Enhancement Proposals; PEP %s" msgstr "Python Enhancement Proposals; PEP %s" @@ -51,24 +52,25 @@ msgstr "Встроенные функции" msgid "Module level" msgstr "Модуль" -#: sphinx/builders/html.py:274 +#: sphinx/builders/html.py:274 sphinx/builders/html.py:276 #, python-format msgid "%b %d, %Y" msgstr "%d %b %Y" #: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:295 msgid "General Index" msgstr "Алфавитный указатель" -#: sphinx/builders/html.py:293 +#: sphinx/builders/html.py:293 sphinx/builders/html.py:295 msgid "index" msgstr "указатель" -#: sphinx/builders/html.py:353 +#: sphinx/builders/html.py:353 sphinx/builders/html.py:355 msgid "next" msgstr "следующий" -#: sphinx/builders/html.py:362 +#: sphinx/builders/html.py:362 sphinx/builders/html.py:364 msgid "previous" msgstr "предыдущий" @@ -76,24 +78,24 @@ msgstr "предыдущий" msgid " (in " msgstr " (в " -#: sphinx/directives/other.py:136 +#: sphinx/directives/other.py:136 sphinx/directives/other.py:138 msgid "Section author: " msgstr "Автор раздела: " -#: sphinx/directives/other.py:138 +#: sphinx/directives/other.py:138 sphinx/directives/other.py:140 msgid "Module author: " msgstr "Автор модуля: " -#: sphinx/directives/other.py:140 +#: sphinx/directives/other.py:140 sphinx/directives/other.py:142 #, fuzzy msgid "Code author: " msgstr "Автор модуля: " -#: sphinx/directives/other.py:142 +#: sphinx/directives/other.py:142 sphinx/directives/other.py:144 msgid "Author: " msgstr "Автор: " -#: sphinx/directives/other.py:215 +#: sphinx/directives/other.py:215 sphinx/directives/other.py:219 msgid "See also" msgstr "См.также" @@ -162,22 +164,22 @@ msgstr "тип" msgid "variable" msgstr "Переменная" -#: sphinx/domains/cpp.py:904 +#: sphinx/domains/cpp.py:904 sphinx/domains/cpp.py:1020 #, python-format msgid "%s (C++ class)" msgstr "%s (класс C++)" -#: sphinx/domains/cpp.py:919 +#: sphinx/domains/cpp.py:919 sphinx/domains/cpp.py:1043 #, python-format msgid "%s (C++ type)" msgstr "%s (тип C++)" -#: sphinx/domains/cpp.py:938 +#: sphinx/domains/cpp.py:938 sphinx/domains/cpp.py:1063 #, python-format msgid "%s (C++ member)" msgstr "%s (поле C++)" -#: sphinx/domains/cpp.py:990 +#: sphinx/domains/cpp.py:990 sphinx/domains/cpp.py:1119 #, python-format msgid "%s (C++ function)" msgstr "%s (функция C++)" @@ -188,11 +190,13 @@ msgid "class" msgstr "класс" #: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 +#: sphinx/domains/python.py:253 #, python-format msgid "%s() (built-in function)" msgstr "%s() (встроенная функция)" #: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 +#: sphinx/domains/python.py:317 #, python-format msgid "%s() (%s method)" msgstr "%s() (метод %s)" @@ -208,6 +212,7 @@ msgid "%s (global variable or constant)" msgstr "" #: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 +#: sphinx/domains/python.py:355 #, python-format msgid "%s (%s attribute)" msgstr "%s (атрибут %s)" @@ -240,56 +245,59 @@ msgstr "Исключение" #: sphinx/domains/python.py:255 sphinx/domains/python.py:312 #: sphinx/domains/python.py:324 sphinx/domains/python.py:337 +#: sphinx/domains/python.py:254 sphinx/domains/python.py:311 +#: sphinx/domains/python.py:323 sphinx/domains/python.py:336 #, python-format msgid "%s() (in module %s)" msgstr "%s() (в модуле %s)" -#: sphinx/domains/python.py:258 +#: sphinx/domains/python.py:258 sphinx/domains/python.py:257 #, python-format msgid "%s (built-in variable)" msgstr "%s (встроенная переменная)" #: sphinx/domains/python.py:259 sphinx/domains/python.py:350 +#: sphinx/domains/python.py:258 sphinx/domains/python.py:349 #, python-format msgid "%s (in module %s)" msgstr "%s (в модуле %s)" -#: sphinx/domains/python.py:275 +#: sphinx/domains/python.py:275 sphinx/domains/python.py:274 #, python-format msgid "%s (built-in class)" msgstr "%s (встроенный класс)" -#: sphinx/domains/python.py:276 +#: sphinx/domains/python.py:276 sphinx/domains/python.py:275 #, python-format msgid "%s (class in %s)" msgstr "%s (класс в %s)" -#: sphinx/domains/python.py:316 +#: sphinx/domains/python.py:316 sphinx/domains/python.py:315 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (метод %s.%s)" -#: sphinx/domains/python.py:328 +#: sphinx/domains/python.py:328 sphinx/domains/python.py:327 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (статический метод %s.%s)" -#: sphinx/domains/python.py:331 +#: sphinx/domains/python.py:331 sphinx/domains/python.py:330 #, python-format msgid "%s() (%s static method)" msgstr "%s() (статический метод %s)" -#: sphinx/domains/python.py:341 +#: sphinx/domains/python.py:341 sphinx/domains/python.py:340 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (метод %s.%s)" -#: sphinx/domains/python.py:344 +#: sphinx/domains/python.py:344 sphinx/domains/python.py:343 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (метод %s)" -#: sphinx/domains/python.py:354 +#: sphinx/domains/python.py:354 sphinx/domains/python.py:353 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (атрибут %s.%s)" @@ -308,7 +316,7 @@ msgstr "Состав модуля" msgid "modules" msgstr "модули" -#: sphinx/domains/python.py:537 +#: sphinx/domains/python.py:537 sphinx/domains/python.py:538 msgid "Deprecated" msgstr "Не рекомендуется" @@ -332,17 +340,17 @@ msgstr "статический метод" msgid "module" msgstr "модуль" -#: sphinx/domains/python.py:695 +#: sphinx/domains/python.py:695 sphinx/domains/python.py:696 #, fuzzy msgid " (deprecated)" msgstr " (не рекомендуется)" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:55 sphinx/domains/rst.py:53 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:57 +#: sphinx/domains/rst.py:57 sphinx/domains/rst.py:55 #, python-format msgid "%s (role)" msgstr "" @@ -391,6 +399,7 @@ msgstr "" #: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35 #: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 #: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 +#: sphinx/writers/latex.py:180 msgid "Index" msgstr "Алфавитный указатель" @@ -402,36 +411,36 @@ msgstr "Состав модуля" msgid "Search Page" msgstr "Поиск" -#: sphinx/ext/autodoc.py:1002 +#: sphinx/ext/autodoc.py:1002 sphinx/ext/autodoc.py:1010 #, python-format msgid " Bases: %s" msgstr " Базовые классы: %s" -#: sphinx/ext/autodoc.py:1038 +#: sphinx/ext/autodoc.py:1038 sphinx/ext/autodoc.py:1046 #, python-format msgid "alias of :class:`%s`" msgstr "псевдоним класса :class:`%s`" -#: sphinx/ext/todo.py:41 +#: sphinx/ext/todo.py:41 sphinx/ext/todo.py:42 msgid "Todo" msgstr "План" -#: sphinx/ext/todo.py:109 +#: sphinx/ext/todo.py:109 sphinx/ext/todo.py:110 #, fuzzy, python-format msgid "(The <> is located in %s, line %d.)" msgstr "(Исходный элемент находится в %s, в строке %d.)" -#: sphinx/ext/todo.py:117 +#: sphinx/ext/todo.py:117 sphinx/ext/todo.py:119 msgid "original entry" msgstr "" #: sphinx/ext/viewcode.py:70 msgid "[source]" -msgstr "" +msgstr "[исходный код]" #: sphinx/ext/viewcode.py:117 msgid "[docs]" -msgstr "" +msgstr "[документация]" #: sphinx/ext/viewcode.py:131 #, fuzzy @@ -441,15 +450,15 @@ msgstr "модуль" #: sphinx/ext/viewcode.py:137 #, python-format msgid "

Source code for %s

" -msgstr "" +msgstr "

Исходный код %s

" #: sphinx/ext/viewcode.py:164 msgid "Overview: module code" -msgstr "" +msgstr "Обзор: исходный код модуля" #: sphinx/ext/viewcode.py:165 msgid "

All modules for which code is available

" -msgstr "" +msgstr "

Все модули, в которых есть код

" #: sphinx/locale/__init__.py:155 msgid "Attention" @@ -481,7 +490,7 @@ msgstr "Примечание" #: sphinx/locale/__init__.py:162 msgid "See Also" -msgstr "См.также" +msgstr "См. также" #: sphinx/locale/__init__.py:163 msgid "Tip" @@ -529,7 +538,7 @@ msgstr "базовая функция" #: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10 #: sphinx/themes/basic/localtoc.html:11 msgid "Table Of Contents" -msgstr "Содержание" +msgstr "Оглавление" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 #: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 @@ -546,7 +555,7 @@ msgstr "Введите слова для поиска или имя модуля #: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 msgid "Show Source" -msgstr "Показать исходный текст" +msgstr "Исходный текст" #: sphinx/themes/basic/defindex.html:11 msgid "Overview" @@ -558,7 +567,7 @@ msgstr "Таблицы и указатели:" #: sphinx/themes/basic/defindex.html:23 msgid "Complete Table of Contents" -msgstr "Подробное оглавление" +msgstr "Полное оглавление" #: sphinx/themes/basic/defindex.html:24 msgid "lists all sections and subsections" @@ -566,7 +575,7 @@ msgstr "список всех разделов и подразделов" #: sphinx/themes/basic/defindex.html:26 msgid "search this documentation" -msgstr "поиск во всем документе" +msgstr "поиск в документации" #: sphinx/themes/basic/defindex.html:28 msgid "Global Module Index" @@ -611,16 +620,16 @@ msgstr "Поиск в документе «%(docstitle)s»" #: sphinx/themes/basic/layout.html:131 msgid "About these documents" -msgstr "Об этих документах…" +msgstr "Об этих документах" #: sphinx/themes/basic/layout.html:140 msgid "Copyright" -msgstr "Copyright" +msgstr "Авторские права" #: sphinx/themes/basic/layout.html:189 #, python-format msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgstr "© Авторские права %(copyright)s." #: sphinx/themes/basic/layout.html:191 #, python-format @@ -675,11 +684,10 @@ msgid "" " function will automatically search for all of the words. Pages\n" " containing fewer words won't appear in the result list." msgstr "" -"Здесь можно делать поиск по всем разделам этой " -"документации. Введите ключевые слова в текстовое поле и нажмите кнопку " -"«искать». Внимание: будут найдены только те страницы, в которых " -"есть все указанные слова. Страницы, где есть только " -"часть этих слов, отобраны не будут." +"Здесь можно делать поиск по всем разделам этой документации. Введите " +" ключевые слова в текстовое поле и нажмите кнопку «искать». Внимание: будут " +" найдены только те страницы, в которых есть все указанные слова. Страницы, " +" где есть только часть этих слов, отобраны не будут." #: sphinx/themes/basic/search.html:36 msgid "search" @@ -730,11 +738,12 @@ msgid "Other changes" msgstr "Другие изменения" #: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504 -#: sphinx/writers/html.py:510 +#: sphinx/writers/html.py:510 sphinx/writers/html.py:516 msgid "Permalink to this headline" msgstr "Ссылка на этот заголовок" #: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92 +#: sphinx/writers/html.py:94 msgid "Permalink to this definition" msgstr "Ссылка на это определение" @@ -755,25 +764,44 @@ msgstr "Свернуть боковую панель" msgid "Contents" msgstr "Содержание" -#: sphinx/writers/latex.py:177 +#: sphinx/writers/latex.py:177 sphinx/writers/latex.py:178 msgid "Release" msgstr "Выпуск" #: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 -#: sphinx/writers/texinfo.py:589 +#: sphinx/writers/texinfo.py:589 sphinx/writers/latex.py:601 msgid "Footnotes" msgstr "Сноски" -#: sphinx/writers/latex.py:676 +#: sphinx/writers/latex.py:676 sphinx/writers/latex.py:685 msgid "continued from previous page" -msgstr "" +msgstr "продолжение с предыдущей страницы" -#: sphinx/writers/latex.py:681 +#: sphinx/writers/latex.py:681 sphinx/writers/latex.py:691 #, fuzzy msgid "Continued on next page" msgstr "Продолжается на следующей странице" -#: sphinx/writers/text.py:437 +#: sphinx/writers/text.py:437 sphinx/writers/manpage.py:234 +#: sphinx/writers/text.py:439 msgid "[image]" msgstr "[рисунок]" +#: sphinx/writers/manpage.py:233 sphinx/writers/text.py:438 +#, python-format +msgid "[image: %s]" +msgstr "[рисунок: %s]" + +#: sphinx/ext/graphviz.py:302 sphinx/ext/graphviz.py:310 +#, python-format +msgid "[graph: %s]" +msgstr "[иллюстрация: %s]" + +#: sphinx/ext/graphviz.py:304 sphinx/ext/graphviz.py:312 +msgid "[graph]" +msgstr "[иллюстрация]" + +#: sphinx/ext/intersphinx.py:224 +#, python-format +msgid "(in %s v%s)" +msgstr "" From 14d738c45510bb5847ac7c3e5028f3b549675d75 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 19 Aug 2012 12:13:43 +0200 Subject: [PATCH 026/250] Closes #905: work around Pygments bug returning str instead of Unicode from Latex formatter for empty input. --- sphinx/highlighting.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py index 2f61c1ef1..63464914a 100644 --- a/sphinx/highlighting.py +++ b/sphinx/highlighting.py @@ -207,6 +207,8 @@ class PygmentsBridge(object): if self.dest == 'html': return hlsource else: + if not isinstance(hlsource, unicode): # Py2 / Pygments < 1.6 + hlsource = hlsource.decode() return hlsource.translate(tex_hl_escape_map_new) except ErrorToken: # this is most probably not the selected language, From 316ddaf7327c78ce6c6b1a49ff572c1d4a4db959 Mon Sep 17 00:00:00 2001 From: Benoit Bryon Date: Thu, 30 Aug 2012 14:14:44 +0200 Subject: [PATCH 027/250] Added -l, --followlinks option to sphinx-apidoc. --- doc/invocation.rst | 10 ++++++++++ sphinx/apidoc.py | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/invocation.rst b/doc/invocation.rst index 2c69d32f9..e10c50433 100644 --- a/doc/invocation.rst +++ b/doc/invocation.rst @@ -227,6 +227,16 @@ The :program:`sphinx-apidoc` script has several options: This sets the maximum depth of the table of contents, if one is generated. +.. option:: -l, --followlinks + + This option makes sphinx-apidoc follow symbolic links when recursing the + filesystem to discover packages and modules. You may need it if you want + to generate documentation from a source directory managed by + `collective.recipe.omelette + `_. + + Defaults to False. + .. option:: -T, --no-toc This prevents the generation of a table-of-contents file ``modules.rst``. diff --git a/sphinx/apidoc.py b/sphinx/apidoc.py index ec1a8a33f..0f937108d 100644 --- a/sphinx/apidoc.py +++ b/sphinx/apidoc.py @@ -157,7 +157,8 @@ def recurse_tree(rootpath, excludes, opts): root_package = None toplevels = [] - for root, subs, files in os.walk(rootpath): + followlinks = getattr(opts, 'followlinks', False) + for root, subs, files in os.walk(rootpath, followlinks=followlinks): if is_excluded(root, excludes): del subs[:] continue @@ -246,6 +247,10 @@ Note: By default this script will not overwrite already created files.""") '(default: 4)', type='int', default=4) parser.add_option('-f', '--force', action='store_true', dest='force', help='Overwrite all files') + parser.add_option('-l', '--follow-links', action='store_true', + dest='followlinks', default=False, + help='Follow symbolic links. Powerful when combined ' \ + 'with collective.recipe.omelette.') parser.add_option('-n', '--dry-run', action='store_true', dest='dryrun', help='Run the script without creating files') parser.add_option('-T', '--no-toc', action='store_true', dest='notoc', From 236267847c4d8e3adb959b02cc18b04457423103 Mon Sep 17 00:00:00 2001 From: Benoit Bryon Date: Thu, 30 Aug 2012 14:19:10 +0200 Subject: [PATCH 028/250] Fixed documentation of default behaviour for apidoc's '--followlinks' option. --- doc/invocation.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/invocation.rst b/doc/invocation.rst index e10c50433..e78c7ea38 100644 --- a/doc/invocation.rst +++ b/doc/invocation.rst @@ -234,8 +234,7 @@ The :program:`sphinx-apidoc` script has several options: to generate documentation from a source directory managed by `collective.recipe.omelette `_. - - Defaults to False. + By default, symbolic links are skipped. .. option:: -T, --no-toc From c127ac19bde9cf8b8cb2b7bea4fd83094f3e4e54 Mon Sep 17 00:00:00 2001 From: Benoit Bryon Date: Thu, 30 Aug 2012 15:51:46 +0200 Subject: [PATCH 029/250] Fixed apidoc's --follow-links option in documentation. --- doc/invocation.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/invocation.rst b/doc/invocation.rst index e78c7ea38..258c87b88 100644 --- a/doc/invocation.rst +++ b/doc/invocation.rst @@ -227,7 +227,7 @@ The :program:`sphinx-apidoc` script has several options: This sets the maximum depth of the table of contents, if one is generated. -.. option:: -l, --followlinks +.. option:: -l, --follow-links This option makes sphinx-apidoc follow symbolic links when recursing the filesystem to discover packages and modules. You may need it if you want From c5405184ba16bfcfc9a3e0f6d85b1aae858bb1f1 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Wed, 12 Sep 2012 15:34:00 -0500 Subject: [PATCH 030/250] Add failing tests for nested sections in only directives. --- tests/root/contents.txt | 1 + tests/root/only.txt | 203 +++++++++++++++++++++++++++++++++++ tests/test_only_directive.py | 63 +++++++++++ 3 files changed, 267 insertions(+) create mode 100644 tests/root/only.txt create mode 100644 tests/test_only_directive.py diff --git a/tests/root/contents.txt b/tests/root/contents.txt index 280953b46..ad246cb77 100644 --- a/tests/root/contents.txt +++ b/tests/root/contents.txt @@ -27,6 +27,7 @@ Contents: doctest extensions versioning/index + only Python diff --git a/tests/root/only.txt b/tests/root/only.txt new file mode 100644 index 000000000..4a3eb48a6 --- /dev/null +++ b/tests/root/only.txt @@ -0,0 +1,203 @@ + +1. Sections in only directives +============================== + +Testing sections in only directives. + +.. only:: nonexisting_tag + + Skipped Section + --------------- + Should not be here. + +.. only:: not nonexisting_tag + + 1.1. Section + ------------ + Should be here. + +1.2. Section +------------ + +.. only:: not nonexisting_tag + + 1.2.1. Subsection + ~~~~~~~~~~~~~~~~~ + Should be here. + +.. only:: nonexisting_tag + + Skipped Subsection + ~~~~~~~~~~~~~~~~~~ + Should not be here. + +1.3. Section +------------ + +1.3.1. Subsection +~~~~~~~~~~~~~~~~~ +Should be here. + +1.4. Section +------------ + +.. only:: not nonexisting_tag + + 1.4.1. Subsection + ~~~~~~~~~~~~~~~~~ + Should be here. + +1.5. Section +------------ + +.. only:: not nonexisting_tag + + 1.5.1. Subsection + ~~~~~~~~~~~~~~~~~ + Should be here. + +1.5.2. Subsection +~~~~~~~~~~~~~~~~~ +Should be here. + +1.6. Section +------------ + +1.6.1. Subsection +~~~~~~~~~~~~~~~~~ +Should be here. + +.. only:: not nonexisting_tag + + 1.6.2. Subsection + ~~~~~~~~~~~~~~~~~ + Should be here. + +1.6.3. Subsection +~~~~~~~~~~~~~~~~~ +Should be here. + +1.7. Section +------------ + +1.7.1. Subsection +~~~~~~~~~~~~~~~~~ +Should be here. + +.. only:: not nonexisting_tag + + 1.7.1.1. Subsubsection + ...................... + Should be here. + +1.8. Section +------------ + +1.8.1. Subsection +~~~~~~~~~~~~~~~~~ +Should be here. + +1.8.1.1. Subsubsection +...................... +Should be here. + +.. only:: not nonexisting_tag + + 1.8.1.2. Subsubsection + ...................... + Should be here. + +1.9. Section +------------ + +.. only:: nonexisting_tag + + Skipped Subsection + ~~~~~~~~~~~~~~~~~~ + +1.9.1. Subsection +~~~~~~~~~~~~~~~~~ +Should be here. + +1.9.1.1. Subsubsection +...................... +Should be here. + +.. only:: not nonexisting_tag + + 1.10. Section + ------------- + Should be here. + +1.11. Section +------------- + +Text before subsection 11.1. + +.. only:: not nonexisting_tag + + More text before subsection 11.1. + + 1.11.1. Subsection + ~~~~~~~~~~~~~~~~~~ + Should be here. + +Text after subsection 11.1. + +.. only:: not nonexisting_tag + + 1.12. Section + ------------- + Should be here. + + 1.12.1. Subsection + ~~~~~~~~~~~~~~~~~~ + Should be here. + + 1.13. Section + ------------- + Should be here. + +.. only:: not nonexisting_tag + + 1.14. Section + ------------- + Should be here. + + .. only:: not nonexisting_tag + + 1.14.1. Subsection + ~~~~~~~~~~~~~~~~~~ + Should be here. + + 1.15. Section + ------------- + Should be here. + +.. only:: nonexisting_tag + + Skipped document level heading + ============================== + Should not be here. + +.. only:: not nonexisting_tag + + 2. Included document level heading + ================================== + Should be here. + +3. Document level heading +========================= +Should be here. + +.. only:: nonexisting_tag + + Skipped document level heading + ============================== + Should not be here. + +.. only:: not nonexisting_tag + + 4. Another included document level heading + ========================================== + Should be here. diff --git a/tests/test_only_directive.py b/tests/test_only_directive.py new file mode 100644 index 000000000..10683613c --- /dev/null +++ b/tests/test_only_directive.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +""" + test_only_directive + ~~~~~~~~~~~~~~~~~~~ + + Test the only directive with the test root. + + :copyright: Copyright 2010 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re + +from docutils import nodes + +from util import * + + +def teardown_module(): + (test_root / '_build').rmtree(True) + + +@with_app(buildername='text') +def test_sectioning(app): + + def getsects(section): + if not isinstance(section, nodes.section): + return [getsects(n) for n in section.children] + title = section.next_node(nodes.title).astext().strip() + subsects = [] + children = section.children[:] + while children: + node = children.pop(0) + if isinstance(node, nodes.section): + subsects.append(node) + continue + children = list(node.children) + children + return [title, [getsects(subsect) for subsect in subsects]] + + def testsects(prefix, sects, indent=0): + title = sects[0] + sprint(' ' * indent + title) + parent_num = title.split()[0] + assert prefix == parent_num, \ + 'Section out of place: %r' % title + for i, subsect in enumerate(sects[1]): + num = subsect[0].split()[0] + assert re.match('[0-9]+[.0-9]*[.]', num), \ + 'Unnumbered section: %r' % subsect[0] + testsects(prefix + str(i+1) + '.', subsect, indent+4) + + app.builder.build(['only']) + doctree = app.env.get_doctree('only') + app.env.process_only_nodes(doctree, app.builder) + + parts = [getsects(n) + for n in filter(lambda n: isinstance(n, nodes.section), + doctree.children)] + sprint('\nChecking headings in only.txt:') + for i, s in enumerate(parts): + testsects(str(i+1) + '.', s, 4) + assert len(parts) == 4, 'Expected 4 document level headings, got:\n%s' % \ + '\n'.join([p[0] for p in parts]) From 6654687ec19a446388b7799c1e11b361921c4f7b Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Wed, 12 Sep 2012 15:43:27 -0500 Subject: [PATCH 031/250] Closes #886: Fix handling of section headings in "only" directives. --- sphinx/directives/other.py | 43 +++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py index aa4142d6f..506d4be91 100644 --- a/sphinx/directives/other.py +++ b/sphinx/directives/other.py @@ -338,9 +338,46 @@ class Only(Directive): node.document = self.state.document set_source_info(self, node) node['expr'] = self.arguments[0] - self.state.nested_parse(self.content, self.content_offset, node, - match_titles=1) - return [node] + + # Same as util.nested_parse_with_titles but try to handle nested + # sections which should be raised higher up the doctree. + surrounding_title_styles = self.state.memo.title_styles + surrounding_section_level = self.state.memo.section_level + self.state.memo.title_styles = [] + self.state.memo.section_level = 0 + try: + result = self.state.nested_parse(self.content, self.content_offset, + node, match_titles=1) + title_styles = self.state.memo.title_styles + if (not surrounding_title_styles + or not title_styles + or title_styles[0] not in surrounding_title_styles + or not self.state.parent): + # No nested sections so no special handling needed. + return [node] + # Calculate the depths of the current and nested sections. + current_depth = 0 + parent = self.state.parent + while parent: + current_depth += 1 + parent = parent.parent + current_depth -= 2 + title_style = title_styles[0] + nested_depth = len(surrounding_title_styles) + if title_style in surrounding_title_styles: + nested_depth = surrounding_title_styles.index(title_style) + # Use these depths to determine where the nested sections should + # be placed in the doctree. + n_sects_to_raise = current_depth - nested_depth + 1 + parent = self.state.parent + for i in xrange(n_sects_to_raise): + if parent.parent: + parent = parent.parent + parent.append(node) + return [] + finally: + self.state.memo.title_styles = surrounding_title_styles + self.state.memo.section_level = surrounding_section_level class Include(BaseInclude): From ead356e3cfa974e715ae4b9954b3ae5aee44b24c Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Wed, 12 Sep 2012 16:40:10 -0500 Subject: [PATCH 032/250] Remove note about sectioning limitation of the "only" directive. --- doc/markup/misc.rst | 7 ------- 1 file changed, 7 deletions(-) diff --git a/doc/markup/misc.rst b/doc/markup/misc.rst index 3a2ffa32e..f5eaac9ce 100644 --- a/doc/markup/misc.rst +++ b/doc/markup/misc.rst @@ -182,13 +182,6 @@ Including content based on tags The format of the current builder (``html``, ``latex`` or ``text``) is always set as a tag. - .. note:: - - Due to docutils' specifics of parsing of directive content, you cannot put - a section with the same level as the main document heading inside an - ``only`` directive. Such sections will appear to be ignored in the parsed - document. - .. versionadded:: 0.6 From bf362e9ccbf03988116d1c55209ae17ec8c17117 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sun, 16 Sep 2012 01:08:47 -0500 Subject: [PATCH 033/250] Closes #617: Fix docstring preparation without included signature: only ignore indentation of one line, not two. --- sphinx/ext/autodoc.py | 5 ++++- tests/test_autodoc.py | 13 +++++++++++++ tests/test_only_directive.py | 2 -- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 9c6575f52..c15726b48 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -862,7 +862,7 @@ class DocstringSignatureMixin(object): """ def _find_signature(self, encoding=None): - docstrings = Documenter.get_doc(self, encoding, 2) + docstrings = Documenter.get_doc(self, encoding) if len(docstrings) != 1: return doclines = docstrings[0] @@ -877,6 +877,9 @@ class DocstringSignatureMixin(object): # the base name must match ours if not self.objpath or base != self.objpath[-1]: return + # re-prepare docstring to ignore indentation after signature + docstrings = Documenter.get_doc(self, encoding, 2) + doclines = docstrings[0] # ok, now jump over remaining empty lines and set the remaining # lines as the new doclines i = 1 diff --git a/tests/test_autodoc.py b/tests/test_autodoc.py index 965064c37..6dedaad8f 100644 --- a/tests/test_autodoc.py +++ b/tests/test_autodoc.py @@ -518,6 +518,12 @@ def test_generate(): 'test_autodoc.DocstringSig.meth') assert_result_contains( ' rest of docstring', 'method', 'test_autodoc.DocstringSig.meth') + assert_result_contains( + '.. py:method:: DocstringSig.meth2()', 'method', + 'test_autodoc.DocstringSig.meth2') + assert_result_contains( + ' indented line', 'method', + 'test_autodoc.DocstringSig.meth2') assert_result_contains( '.. py:classmethod:: Class.moore(a, e, f) -> happiness', 'method', 'test_autodoc.Class.moore') @@ -660,6 +666,13 @@ First line of docstring rest of docstring """ + def meth2(self): + """First line, no signature + Second line followed by indentation:: + + indented line + """ + class StrRepr(str): def __repr__(self): return self diff --git a/tests/test_only_directive.py b/tests/test_only_directive.py index 10683613c..2396046e4 100644 --- a/tests/test_only_directive.py +++ b/tests/test_only_directive.py @@ -39,7 +39,6 @@ def test_sectioning(app): def testsects(prefix, sects, indent=0): title = sects[0] - sprint(' ' * indent + title) parent_num = title.split()[0] assert prefix == parent_num, \ 'Section out of place: %r' % title @@ -56,7 +55,6 @@ def test_sectioning(app): parts = [getsects(n) for n in filter(lambda n: isinstance(n, nodes.section), doctree.children)] - sprint('\nChecking headings in only.txt:') for i, s in enumerate(parts): testsects(str(i+1) + '.', s, 4) assert len(parts) == 4, 'Expected 4 document level headings, got:\n%s' % \ From ad6318e7f16e61ae694a5ffa87b1c7f4497c3698 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Tue, 2 Oct 2012 20:53:40 -0500 Subject: [PATCH 034/250] Closes #1004: Add default value for docutils setting file_insertion_enabled. --- sphinx/environment.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sphinx/environment.py b/sphinx/environment.py index a4bbbe3b9..824d9c184 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -66,6 +66,7 @@ default_settings = { 'doctitle_xform': False, 'sectsubtitle_xform': False, 'halt_level': 5, + 'file_insertion_enabled': True, } # This is increased every time an environment attribute is added From 23a86297c345df95f0ea0a2db7e23631514af2ab Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Tue, 9 Oct 2012 23:41:21 +0200 Subject: [PATCH 035/250] Close #955: Only update text nodes in translation --- sphinx/environment.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index 5661c468a..8f18acc67 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -213,19 +213,23 @@ class Locale(Transform): parser = RSTParser() for node, msg in extract_messages(self.document): - patch = new_document(source, settings) msgstr = catalog.gettext(msg) # XXX add marker to untranslated parts if not msgstr or msgstr == msg: # as-of-yet untranslated continue + + patch = new_document(source, settings) parser.parse(msgstr, patch) patch = patch[0] # XXX doctest and other block markup if not isinstance(patch, nodes.paragraph): continue # skip for now - for child in patch.children: # update leaves - child.parent = node - node.children = patch.children + + # copy text children + for i, child in enumerate(patch.children): + if isinstance(child, nodes.Text): + child.parent = node + node.children[i] = child class SphinxStandaloneReader(standalone.Reader): From 5521b8da2e3f860116fcab4900a45c697cdb6ef6 Mon Sep 17 00:00:00 2001 From: Franck Michea Date: Thu, 11 Oct 2012 20:58:54 +0200 Subject: [PATCH 036/250] domain override: fix issue #1009. --- sphinx/application.py | 2 +- tests/test_application.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/sphinx/application.py b/sphinx/application.py index bfb39a70f..291b29317 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -409,7 +409,7 @@ class Sphinx(object): if domain.name not in self.domains: raise ExtensionError('domain %s not yet registered' % domain.name) if not issubclass(domain, self.domains[domain.name]): - raise ExtensionError('new domain not a subclass of registered ' + raise ExtensionError('new domain not a subclass of registered %s ' 'domain' % domain.name) self.domains[domain.name] = domain diff --git a/tests/test_application.py b/tests/test_application.py index 4baabcec9..a6e798c2c 100644 --- a/tests/test_application.py +++ b/tests/test_application.py @@ -12,6 +12,7 @@ from StringIO import StringIO from sphinx.application import ExtensionError +from sphinx.domains import Domain from util import * @@ -69,3 +70,23 @@ def test_extensions(): assert warnings.getvalue().startswith("WARNING: extension 'shutil'") finally: app.cleanup() + +def test_domain_override(): + class A(Domain): + name = 'foo' + class B(A): + name = 'foo' + class C(Domain): + name = 'foo' + status, warnings = StringIO(), StringIO() + app = TestApp(status=status, warning=warnings) + try: + # No domain know named foo. + raises_msg(ExtensionError, 'domain foo not yet registered', + app.override_domain, A) + assert app.add_domain(A) is None + assert app.override_domain(B) is None + raises_msg(ExtensionError, 'new domain not a subclass of registered ' + 'foo domain', app.override_domain, C) + finally: + app.cleanup() From 7b15082a86a766deb15e5c2d06633cbcbe54e267 Mon Sep 17 00:00:00 2001 From: Akihiro Uchida Date: Sat, 20 Oct 2012 14:42:28 +0900 Subject: [PATCH 037/250] disable fncychap for Japanese documents --- sphinx/writers/latex.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index a3f33cac4..d7b9dfb7e 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -209,6 +209,8 @@ class LaTeXTranslator(nodes.NodeVisitor): self.elements['classoptions'] = ',dvipdfmx' # disable babel which has not publishing quality in Japanese self.elements['babel'] = '' + # disable fncychap in Japanese documents + self.elements['fncychap'] = '' else: self.elements['classoptions'] += ',english' # allow the user to override them all From b733f49085c81d27d2bbe4680c0d8d226d46e020 Mon Sep 17 00:00:00 2001 From: Akihiro Uchida Date: Sat, 20 Oct 2012 18:34:16 +0900 Subject: [PATCH 038/250] fix chapter name in footer for Japanese documents --- sphinx/texinputs/sphinx.sty | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index 54e856771..758fb9a89 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -118,6 +118,10 @@ \fancyhead[LE,RO]{{\py@HeaderFamily \@title, \py@release}} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\footrulewidth}{0.4pt} + % define chaptermark with \@chappos when \@chappos is available for Japanese + \ifx\@chappos\undefined\else + \def\chaptermark##1{\markboth{\@chapapp\space\thechapter\space\@chappos\space ##1}{}} + \fi } % Update the plain style so we get the page number & footer line, % but not a chapter or section title. This is to keep the first From 883887b57bbf40902baa4791e59a2821d813abeb Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 17:57:40 +0100 Subject: [PATCH 039/250] Changelog and style fixes for PR#75. --- CHANGES | 2 ++ doc/invocation.rst | 2 ++ sphinx/apidoc.py | 4 ++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 25bc6daf4..b7c269f86 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ Release 1.2 (in development) ============================ +* PR#75: Added ``--follow-links`` option to sphinx-apidoc. + * PR#45: The linkcheck builder now checks ``#anchor``\ s for existence. * PR#28: Added Hungarian translation. diff --git a/doc/invocation.rst b/doc/invocation.rst index 258c87b88..da052bdb6 100644 --- a/doc/invocation.rst +++ b/doc/invocation.rst @@ -236,6 +236,8 @@ The :program:`sphinx-apidoc` script has several options: `_. By default, symbolic links are skipped. + .. versionadded:: 1.2 + .. option:: -T, --no-toc This prevents the generation of a table-of-contents file ``modules.rst``. diff --git a/sphinx/apidoc.py b/sphinx/apidoc.py index 0f937108d..78ba88774 100644 --- a/sphinx/apidoc.py +++ b/sphinx/apidoc.py @@ -249,8 +249,8 @@ Note: By default this script will not overwrite already created files.""") help='Overwrite all files') parser.add_option('-l', '--follow-links', action='store_true', dest='followlinks', default=False, - help='Follow symbolic links. Powerful when combined ' \ - 'with collective.recipe.omelette.') + help='Follow symbolic links. Powerful when combined ' + 'with collective.recipe.omelette.') parser.add_option('-n', '--dry-run', action='store_true', dest='dryrun', help='Run the script without creating files') parser.add_option('-T', '--no-toc', action='store_true', dest='notoc', From fc7edd8f71d00fc317d3231af25d1af1c2cd7b7a Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:01:12 +0100 Subject: [PATCH 040/250] Remove unneeded semicolon. --- sphinx/util/nodes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py index 8b8dd2bc5..16ae262d2 100644 --- a/sphinx/util/nodes.py +++ b/sphinx/util/nodes.py @@ -47,7 +47,7 @@ def extract_messages(doctree): # It should be fixed in Docutils. There is a patch for it in Docutils # tracker: https://sourceforge.net/tracker/?func=detail&aid=3548418&group_id=38414&atid=422032 if isinstance(node, nodes.term) and not node.source: - definition_list_item = node.parent; + definition_list_item = node.parent node.source = definition_list_item.source node.line = definition_list_item.line - 1 node.rawsource = definition_list_item.rawsource.split("\n", 2)[0] From aedfa7db6b7121194a6c31a8fb30c2485f39e779 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:07:09 +0100 Subject: [PATCH 041/250] Fix test suite: new code in extract_messages cannot always work. --- sphinx/util/nodes.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py index 16ae262d2..da7413f14 100644 --- a/sphinx/util/nodes.py +++ b/sphinx/util/nodes.py @@ -48,9 +48,10 @@ def extract_messages(doctree): # tracker: https://sourceforge.net/tracker/?func=detail&aid=3548418&group_id=38414&atid=422032 if isinstance(node, nodes.term) and not node.source: definition_list_item = node.parent - node.source = definition_list_item.source - node.line = definition_list_item.line - 1 - node.rawsource = definition_list_item.rawsource.split("\n", 2)[0] + if definition_list_item.line is not None: + node.source = definition_list_item.source + node.line = definition_list_item.line - 1 + node.rawsource = definition_list_item.rawsource.split("\n", 2)[0] if not node.source: continue # built-in message if isinstance(node, IGNORED_NODES): From f30ef68167e58dea3ee44400081ea4d8c62061d7 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:12:06 +0100 Subject: [PATCH 042/250] Only select 3.x versions. --- sphinx/highlighting.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py index 0c4d66476..ec1eca921 100644 --- a/sphinx/highlighting.py +++ b/sphinx/highlighting.py @@ -143,8 +143,8 @@ class PygmentsBridge(object): # just replace all non-ASCII characters. src = src.encode('ascii', 'replace') - if sys.version_info < (3, 2): - # Python 3.1 can't proceess '\r' as linesep. + if (3, 0) <= sys.version_info < (3, 2): + # Python 3.1 can't process '\r' as linesep. # `parser.suite("print('hello')\r\n")` cause error. if '\r\n' in src: src = src.replace('\r\n', '\n') From 88dac45c9e86258da9e3437e40bd590dae7d511a Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:19:54 +0100 Subject: [PATCH 043/250] Fix Norwegian language code. --- doc/config.rst | 1 + sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js | 1 + sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo | Bin 0 -> 9145 bytes .../{no_NB => nb_NO}/LC_MESSAGES/sphinx.po | 0 sphinx/locale/no_NB/LC_MESSAGES/sphinx.js | 1 - sphinx/locale/no_NB/LC_MESSAGES/sphinx.mo | Bin 9981 -> 0 bytes 6 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js create mode 100644 sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo rename sphinx/locale/{no_NB => nb_NO}/LC_MESSAGES/sphinx.po (100%) delete mode 100644 sphinx/locale/no_NB/LC_MESSAGES/sphinx.js delete mode 100644 sphinx/locale/no_NB/LC_MESSAGES/sphinx.mo diff --git a/doc/config.rst b/doc/config.rst index 6178d459b..df5a208c6 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -383,6 +383,7 @@ documentation on :ref:`intl` for details. * ``ko`` -- Korean * ``lt`` -- Lithuanian * ``lv`` -- Latvian + * ``nb_NO`` -- Norwegian Bokmal * ``ne`` -- Nepali * ``nl`` -- Dutch * ``pl`` -- Polish diff --git a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js new file mode 100644 index 000000000..9f3099224 --- /dev/null +++ b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "nb_NO", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Skjul s\u00f8keresultat", "Permalink to this definition": "Permalink til denne definisjonen", "Expand sidebar": "Utvid sidepanelet", "Permalink to this headline": "Permalink til denne oversikten", "Collapse sidebar": "Skjul sidepanelet"}}); \ No newline at end of file diff --git a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo new file mode 100644 index 0000000000000000000000000000000000000000..4405e3e82902380fec885c56669d2d92a23c9c4e GIT binary patch literal 9145 zcmcJUZH!!3dB+bWymU#Ll9G@YAP2)bYvNh&TEPt)+sb-vV-vq@yo*BwZn!gZcIJBS z+&j7V&e~g0-%<*yNGkO$5K7bvMNpMSO{v;QQE60{4;A!73RT-wjVKi&Rijd<+Jca1 zfB$pO+?iP$sUJ$TzQ23UJulCB&htFyJd+o$yXrR#|9zT&Z{XkhD^wc)_t6<+uBP}f zyaql7)#Nj92YeF#D10vPAHw&q!=Ir3U*T)v|G?M5*S^M>YvE3)arZ%uy8`($_wvy9 zbMVJtAFBTcL;WLA?H`94|FiH0_$>T!__t8~UW69@H&p){nT%KSHYj=bLG`;Es^5L^ z^{@+Xfp!6M_X-Bnyw}2) z!yBO1c{9}aTcPCH1$V+lsP^v(^$$SJ(}Db%0gpGr4?*?+6x4jb4>kXvLG9NUq1OEz zl)heon)iE9{iIZ0%?y;E+zM5HC)9k0p!VUO!26-b?Lf)fhl(e|Q2#L~xgQUFBJi_N z?LP-K|1(f>JsZCN71VrRfztCohVn~Ldj8K)|4NKk`oA8^&K9A@TZWqVD3o8H4CM}# zK2oT4{WR2iei5qQuR_iHC`|B=--eRw8kC`aH$&~$PN;Rh4QiZ|f%ie_BZ6$T=|IW* z0VutG6iUwDfg1NIsQEt+HU5{v_rD8#5o#a56Us9zM(uBg8gC9FqB#IH&wBXo;9Dpc zQ1d+s~ZbIq#m!b6eYf$Td6sq5+p!E7RsCiz3YX5zx{;$G#-wtnq zn1Z<%s$B>2XSR6AzJ3#G-p8TFdm6qA{yEfsUxU+V-0Ps)-2(4~Z-@GxLXBHMwfhkK zAbbSQ!q>d1((58ryZun>IRz!>8K`kKpzN^+Wgj_|+!vwr^$1k|C!vMULY-s(1hsG9 z4d1V#vG(%@sQR6Oi_p&>%BP^@xF4$hIVk!2Q2V$E)&EzZg^xj|Fwelf@Odb|yT(>= z^9@krFGKZPgIdQ=LFu&(RiB3P7Sy^Qf`nf45vX>bfU=(_pyc=*l%Bo>CEr&A{{^bu zx1ql4Fp+({4oZ&}YW&**cSDW82sO@KQ0qAiwf+{AJrsc-fYSd%kU#Tr9_s%LlwW-T z%0Hinn(rH-{BMx0H{XMr|0aTf=6e&AzHWnB?>;E~91q`52fhc&-=gq6htk_c*nkg( z`lq1g{gc4Yhx#u-t>cTK{AH+l{~oISi%{}>6Ux881J(Xof`R6JJ(M2jp!9zS)V`jC zlJ^0qbvY>eJ0I$Q0jl3epvL=ksCj=2s{QXl&HD$?SZfbOg)5fqY+>wN+YNHpib~hs zMJdKaX6H8I#HCT+?JDffemg3S<{^ z?7Os#$~a3^H^;xIEc3WIEZwe9Gkcs9#zD@%(qO3O+%y7sg7Fmd$=Rk8Y-XVsGCc6k+6v-Mrs&DgHlB2-^i z!T4p|VujNUrSK~cp)XfzeZ_%lRZQwsqSWeAVf(^bS-&5pZJWfYv)Mp?^SjLc?&87aBndlG*bTPpLN{)8*|fG(-)J+6 z6B*k6J+$>5*0N#Va#ag;m@TSr%gt<9+Oq2kS35*umh+Bx4c^KUq2wUTL-r|OvU-*kCFUzQ!-aLYro+c+)Eid|kkK5A`NqM@H= z#rJMc^``B3%(It|`2zyLiqyfdmDnp;l0*ZRS;TGEjB>M*^#_S7on4ozB>75~YPC!^ z`4Xo?R>vw*cd@jCsN?t^HrcG?&M$sg#A#=2AKkJXEbZA-47zc8aek1svTQ!fJ9~B< zT=P}ISgP+2)XJGRho!sR9IgZ2#4D1g>|w3c!W==~+!ij%*?nI7g?u*(rm;Kt5mh56 zu!@-T=187rxjAxiAX^{l<7k$ZX;!+z9L=-7?Yi9At!!vpQCd$iZ71`#5`b1CDQ1Y= z_Cl7owf|)%%d*YvqHVe)yI?h4D~Ve@yQ30%$Gknolr)RH6^4oYD7DNNVyvBgoUppE zWLYv+sJ+ufe%^Vz$`%!V2%=aS#i_Pt!(BjCm1GyP^tRGQg8_<@p{Z}~ieXZEBc3-$ zhYT90ZFf=oo)HWDw!hQcdSZ|3i+N`iHBVN7G1O(|80KZysx3Jgl`T|8U0Rys{Xv#1 zrkbj)f7+et=LEJLhNOKxp za(YzmYEEOTo3Xo4zbuW;5kJjplw*#puQ00^Z$#AXF&O(n5No>)cFxCy%RhEq)K-i( ztBK>DU?ZJoD8jyr*tgco%$X?W`eM#FFCQ$2Iflk%AiNi*vXOvo zcb8y4vgA>NGu}W)-Ry-JEh(~2UU}AZsv~^8scX*J<)p|M1SR>GE`C^@2Br#przZm6 zx-{=+UGL`Eg~F`I1GApBGjlfFT?%twl*^;c{bR4U?YM1;9bAMkc&v0Q_!CC>UI}>4 zyf^N%7+Cm|=$t|O5#egXF8LFA>HV|C`>9OoSjC~|zc^leY%}%c%v^T58%3$6v)v&Y z^WCavxG)$+f+~=2D7bN*toGddH7*pH`c7nAx*6wL>bHJ$k-B1~zZ$rUE$1%^W)!dt z_onay7hRspg_`9X4?tws;CDZpY zC!jDonEXSIH&DFDn&%nMWCNYeg!<_lh8ZoteyKYS@=WrEyN`L$+jP_-_Q*fHq}Akw z;UdHlp%aO_25~~yKoiWrLU81%dv<{#;y{Az(Z6#M^p0kxZgR$ZOT7U&q1Mzm-fn~| zz>>8yXPkm+<7Cl^+l@oRPSIG;mh6#}%g0aLy?pranImg!Gpnc98~&WeH5!MRYsv0i zSX^u@yrZ#q(Jn45E$q8}Vei5M4I5{$3td^R*lzKTs+}TlV?B@3B9V5PuNb)09=r5( zry2EncE3~k?r!Fb^J#W)<^<>Z5C>?iyQsfpXI7J89wm*V8E5vAO$WYM9N2r8tzHkz zrS{DS?BcGOlgCdU8LxP8eqkouP8#b(lO=5IV!3CKL@_s2wm&aid0<#>H0~U?lcelb z<48)_#dVkLoz1wMsg5(QZjD1*OXOQ@qFtDO$NavTQU1l!*eg57IqQjNP8{m?}<+eASepRPt zJ%abZsyj|Mm3&pR5hggs)nc4{O;>nND|!l#Qy--BD~}Pfugh9rd8AqylWLVPW3~JI zYieb^D*MVf+0S#&jgrm}HTgP>&ysu%2Dzk7;*L_j!N#ShDU;Tahj9Z*xpispcH60vx@_mRyUA^|7vm>Aloa}oGq8KcUuZYVzfSi#JF!EOubxl22;QUY%bad< z7tity&OJAod9iOk?Q(f_VMT5(THJQpUUKfVK1slsr!ueO!D=0O!?>kS!_0CUt1XD) z`sB(mg6?dLh&H9` z@Ud`Qe0`nNP!ieDgWm^sh0C5snaIUXM0g}2;Qt{FI~wIqbNZ-PzxW9!vRcyPv=iIn z($hW1X&!vnduL;JaHB@39r;0#Mw=-ahKm#P?sAiR)1)qrRw-C+bc^nBrD+eV;cYV^ zbJ%VxshhXcBBZX3`fS!=`k13=hlJZP@9({9l9M|cc3g6JZ;;jST15TQ+x}=7^X3@) z!ae`8-AH{0yv8g37)HlwvON_FHJ6?+VXHN3m0d+;l?k1ViGLj>HKbAgd4)9Sve_+{ z8FI-U0cSJxVwq$^K4h9T|MSDZ=R^3#?A-QjXwr(CaWjd@SI|e5>{L>p)V)eSsK{I+ zxm;CKdv#S#<4u<5^CBmYGpDx7Z7y@l8>s7(qR5Mvy^Yb0cz` zac&eRA)3sGFcBjI^^fgojZDbfoLY>HNu}Tz z+w&lQl#h1O2hTO4B(h+ZqnESfI%9=jDf)0ipli*XntQnPu>=w#vZBe1h=4r`o`+GF z*P!i0I1oWPB}N>&RYnx@qMVdS^Hyg?FB(*~tkej{8>dF&^MB&_mrmpXwI|g5 zLx!Z=i6NNhn=Zyp_<>3i``C|__}qwFw`({S%(FreSL;i2XR*xR~sl2|eO(sS-=l=p9vVYb9 literal 0 HcmV?d00001 diff --git a/sphinx/locale/no_NB/LC_MESSAGES/sphinx.po b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po similarity index 100% rename from sphinx/locale/no_NB/LC_MESSAGES/sphinx.po rename to sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po diff --git a/sphinx/locale/no_NB/LC_MESSAGES/sphinx.js b/sphinx/locale/no_NB/LC_MESSAGES/sphinx.js deleted file mode 100644 index d00991b2a..000000000 --- a/sphinx/locale/no_NB/LC_MESSAGES/sphinx.js +++ /dev/null @@ -1 +0,0 @@ -Documentation.addTranslations({"locale": "no_NB", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Skjul S\u00f6kresultater", "Permalink to this definition": "Permalink til denne definisjonen", "Expand sidebar": "Utvid sidepanelet", "Permalink to this headline": "Permalink til denne overskriften", "Collapse sidebar": "Kollaps sidepanelet"}}); \ No newline at end of file diff --git a/sphinx/locale/no_NB/LC_MESSAGES/sphinx.mo b/sphinx/locale/no_NB/LC_MESSAGES/sphinx.mo deleted file mode 100644 index eba1f773f4270d8a12c1037efdb8f0d9eb191f58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9981 zcmcJUeUM~Td4~_Utg;#*DuECnhm~1p-0j)f6;_!2fZ5qycG<6CXIwz!<97F*?z?^a z-saxhGdoHUh$P|%Q49(y1SLyCVnQ@Q(9*)x77{8Xl_IHV#R#cXkyMgDG$s&JCS{)A zxu<)2X4k6xp||$!=bm%V_j%v%(sSHqtt{~Guf7{N2(ZBXsq1J&MV;OpUI{`(V${y#yLe-*wNuAs4Bfakz7;d;m?a|N{UAXNPhRQq>Ajq@I;diO)sdmNq(zX5*{ zejBR&AHZ|rN(!9=FN7NRIMnwmp~_zmH^DCaW%vbnF?=45!BZH-FTsuQEO-EF9CgnG zzK--!xDDRn)8Bxa?{o0A@LN#zUxI4?761M1Zz|_;Db#rPK($wgnr9oTzYoBJ@E*7l zz6iC&FGG#*`|zFc4NOk^y8~)HuY#(7ohE&XF*T@m>ujpV_dcjkcf(WRgFgK*TtWIz zpz41Gs@>yI^LWnlC8+wZzzgB&d}Qg(TB!Bj?9;oU_VHSuUxyn1Es&)!xBB!wQ2jmt zHNJBijqfg~@jL*vevd-!%O60E z>j|I!Q~&)r$dt@q`R^}7wfpZ->n){2Ma+3n)(dbv%8_%djP7PhamsVF`s@KYCXOQ zHQyJY=JWSZ_5KyA-|xW~`}iT$xI#Kny$ousQU z4AtH%Q2n0DCaB#rp}wEzxejXow)pe`sPZ>LwHHHF&)fmk&;9=UWALq{pM+}fJ5cuV zZ=SD0)jI`cQN42@TVh5aQ#IS6?BhLADk3o&=kA40#a1-elq5S1p7nFYQ z61bLh0oCrqQ0;ydYJL9_Y8}4?HUICxZSbF=)^iPwsh=^Z^4p>6?}eAZn;<4`?t?1# z`;e)buS4n8-$C{Jk5KLX54;MlwBpsB$;KOW^{P9()O^-6x^SJqK@vFTf#q z5a*_K?Lw8i9cn)JLXGp2Q0@F4lpa0~r59g@8u!;ALozQw)&Bvsa0N<*>6#&^_P0WP z-wm~&@AmmeJiGq;?LK`k)Hoi5D*rjC@qZC&pT7##?q5R-UxX~V`7zuGFF<*mzl0Z& zz8R|jyP)cQ3Thsohg#R)_4!}&>90f0`&q~lWS;l=FG1dMeFv0&Tnn|1b+`hyJUdY1=t8ygeyI6;5NiIv1Emj7dOi)c{?9^|+U1_&_IUwRe`|euBSgi`yew01UZQ4xgXKmeO3t`*~Pn%%aF|oO*@?cWk8nzRkaH@DyZs=lb+(;p>pKKK)5} z267nbAQvKcB6lFY=O{0SkU3-unMck?) zsM>$a)!u~dc@Kd z(VQPiBTlP9+#jAzGh0iOya4 zeL@E97g3EFE-k19KY0`Sa_x3g^5d^4&w*|d77 zy1`r!#Zt5_>nZChOsCzf7M3McVJI)ZO;povVT)#%hZaNWwi!ZhCbCBFttiN08O%hN zeagnIUedO zz0zhf=(=tuUG4gk+LT>v^YDpn{sd#6)N;^lIqbOW36B=G6Es4;`%N~JS?DI;&7-8Ts2|Ou=!~ylpLd#3a&)wl z*3xt|%^K@hZ<}^mURlcTH}w~1)a=mOWoAd;xedHB@`OF?FKTXfGTzMQVUV%=ytZ@M zZs1j8owp;hdPZR79Y@X1EK4)9^Jqu9-dm4dX<8&{5$0xBmbPs(%tE`6c5N+4`duv5 zlTlj^fKt6ttins%`82C*|BF&<=sR+) z^v66Oq3!JBfY$jbOOw$;?VUPu{f^oxwkUT^;Khm{O0+ez;XF%Kj%+?n-d5P4(_!JH zXsVlqc{eVc5|5f)T^fy&dU#a(p5hDKwqNOVJ+^!F#avl>&Hbfg^m(b-je6PXa!d9H zMU5pRFDcBPb|=l`Q%zac{n|B2@0@Cd3z$cltL}1JU9c!9`>NciMvfM+khz~1oz2g3Pf zhIv3XQKX%yX0(y!AZy9#QJSkch_22>;e7vPymyYcZl;0^b!2|InL>F3yl#ue*bkgo zJ)C9dT(>8FY=%KyKH5yhA$I~B=rm&?>{a-_=~@{Gpx7(oUKOalYA3?VQqi;0rBT(5t&r?6MzoD2TYKm_wl( zA1t~VipFKYzvrgZ5szi}6t6$hDvsGx+|dPKTkLi1U<2 zSS0t-#16~Tz?6>f;DFEDS=n9N04nz*g+ zU8GK$>8=Lh(OT#(3a00<4EL!#m*HvHrh$^TaWqBR3KJ7K-+`^m6&anGST(cG%dIO- zJnvR}Y2)sero0CNU6xGS`5cej=wNa`GQ5ubMOr;VdnWDZY{u0uyUeS+~RaPsNs8LA8w>&=egk`#1WwriMs}VLf1g!)xU%{WPhzFT}X~1VnBlQ(YeU00VV;eS9#xARD++a71jgM_wJGOCbjDnRz=!LE!ylWv?nb6WlJQJ8mznM#ZY~IOFP8*}gDNY{e$pvC+#$ zH?8W$T1<_-vcsISVO$T128N@bZk$y{5JUN3nB{|x$qEM5l0Pd8O;*}Ls~=`n+F?Bo z+r3YVanWR@RGBdL--w!8oQ(NE*rkT^BmIV5oHfwek~k|$lCZkas4r=xpSiTJvL73< zYGvngDokOnOf8ACSnM#4!_2mphFawb*>AyFTUi|gTM}rMz2Oo#vQ=U+&{~?|tSWEG z6)yRpH9vV9KGHg&^vPT5FUH`qYA}n-?qaPaGi#NRR>~=Uggb2zH-4sp)(-5GK&#Wq zG}<_7D7@>;9)F57Aq+7Ww~d4wmiBI)?HoU*h>MX8hFraib!MA$+&o(mHql~{eBH%p zYwzM0%JpKcgKf@9^pHTS<-#i*buZE~2dmt>(`=SAE*y-q*f$qqg;{wyW!zk#Vb~&YMxi=l1L%PlCCG zXd;Ya^R8l!JJR4<>?*^p%;?74;`&nWmd)F0Oq8%(SCVklE*(M=)>%HAHt0U$*jcT? ztsZrE+-Z%I`xts$a8S<@!SI>~?ZWAPZyKX!H~Ye!{)F8~Tm`JgE&Ohjj+0|~*yD4K zA2WWd)oU3^1w|S49FFjR4FxcSOz!t2A8Hf%OjsbEv`n@I3hM-J<7nQ9QA(Pq4dWSscRsUD|7l*U8a+0j_J7=D3ryS0}I76 zlR4lNG;9-&$ciUqRf`7dVxOE<=)d?NXtASy97H^`7zaf$F%V|#BO#qv+#gR?KpsIo z@cA$`*kK~WK<5stI1mv@ThIdk1)E~KP|q~u?@z?w5hfS+LYx18{8KLH?rz3Dt3_0b zeo^=a{mZUh@G}_updv;J>VB4oFj66>b1Jc@OiFpfSRV7ZqrA71&UsGbB^e89*?T!m zT(h{~C-Xj>5UjO&PRw2|cuaxdhX`me`oUrMoaYXf%dMbo1Q-xb+Q&RxFf$kSluka- z#u4{abtXVJieC7m9a$Ft1PXxMl)|j%Sa_L>;@0tFSw99Uh$PC33CB;rf{`CV-EFR0 ze|i3Tl&8O;$I`j7Gj=wkH^2RE&HIs%l*hEA_{j06dRLrfNq1a#`TI&sfsY$7VFpn- zOXp*rLSAVw>`BCj*2P_9i&+Fg-28}sbV*YX#GzY8 zKRyP^2!GUXc~-Q7PN~ZZgD||sFlh1oA2|NCCbEFOCG_k2Xh^pcgEP&uvv~iu KHW&n9oc{;$uDXo? From 8944af3642aae2992b686140fc6134c5560dc5e1 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:20:00 +0100 Subject: [PATCH 044/250] Locale update.# --- sphinx/locale/fr/LC_MESSAGES/sphinx.mo | Bin 10024 -> 9486 bytes sphinx/locale/hu/LC_MESSAGES/sphinx.js | 2 +- sphinx/locale/hu/LC_MESSAGES/sphinx.mo | Bin 8164 -> 8198 bytes sphinx/locale/ja/LC_MESSAGES/sphinx.mo | Bin 10077 -> 10189 bytes sphinx/locale/ne/LC_MESSAGES/sphinx.mo | Bin 12378 -> 12310 bytes sphinx/locale/ru/LC_MESSAGES/sphinx.js | 2 +- sphinx/locale/ru/LC_MESSAGES/sphinx.mo | Bin 10872 -> 11037 bytes sphinx/locale/ru/LC_MESSAGES/sphinx.po | 1 - sphinx/locale/sk/LC_MESSAGES/sphinx.js | 2 +- sphinx/locale/sk/LC_MESSAGES/sphinx.mo | Bin 8143 -> 8889 bytes 10 files changed, 3 insertions(+), 4 deletions(-) diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo index 1027a790e9874004f468c2d276df46d3971b5ce7..4a9d51f28988e43afd99d95bbaa8a6a2ecc9150f 100644 GIT binary patch delta 2825 zcmZwIeN5F=9LMn^TtVcafD6Rs=>}Y)rcLx{wduufl9xgXQ=r7T|tdibruVPGb&w z$TkD-Mg?xbdFaDxY}GaK&6_m%HG_P_<1lLA*QkjvpfXNpc}lPtHBk+!0`;f>593;F z!8rUFDV`ZdC3FHS@E6n;7O)>-+Qvge6D-vR%^^F~#5F`Ews{a$fo6=s?e@A89bCVR z8owJg@jlc7daa+J#-GMp@e(RjTq^aaS|*c?Qb!R|eX|7BUxQk~D&*HR*y|Ql;C57k z9jJ;tiwfL@8rO$9)bF7xcM5B961DIJY1F@%#(}i4 zUexJ+%ibSGO+11s`8cvza}AZ?Jjx(bQS-UNG)Tsjph{SY3S5h^cn@l&t5J#Ek0t2E znFMYBPSnI*sDxg{JbVW=?+7Z+C@Sy-YOBK2G_>NsQKgD!v;r2R2HuXEa0wrJE9z~( z4;8QtwFT|gr%@Akp%Q)t^*yoA_8&tf{#DelIb}P(Lk;*ImB1xbVw3j%pQwO0P$iCI zqjjBuDseule-Wzm)u=P&Ma|cW3LHSa#@lAD+5avYDoGD&#fMNUdK)$HQ+$`VVi=Xs zV_8w3M6L7%)C#*%3B7Oq+}{5ZmEZ_cWOE*s*i}r@`#*=eDqspKkzCXRrPfN+-qqV{ zFY5VL)P&oS+{}yi`XH(jAD|LDj(VLZQ1kzbT4*9=2y-w^1`U<06gANb%ttShr0GBf z>_*0#{iyf&Bh)wHIV`|b-mzs^hIir?)N6OhdIS}C%zDwq`(H=L6dhV&8CfVm9jcTM zA-~4YM-A>kmGT(sbbpIFGru8InCqwj>73-%n1|Z)HdKEQwXi2pU%`8GslOgLM~5c< z5jkJxcl5I7@kDWRy^&Gcl4p<@CW0||7(F zumZ!KG*tQ_EXL!gE%+5xkyx_RN}Q-tyHJT0q5_qnR$PS|w*ocadeoK#P+Rpp>MZr+ z%s-{5VRM3p28^OgGhrY22NgJ;BdiJ}qXIfniR9rz^w|6BY`+)v+(uMI+E6Qh%J%o6 z7IqlZ^#6aDh60?K>EJA&GM++Blvos9p%b;jd{hZ5Z2tqO=Qg0;rcJ2V?Qzrsy6ycQ zT*UPO+kYD4h;K&i1LxJj_0OmkPFepzWqboQVG8@C5;{@+1*knR3-1j+t81^ zp=K94@D0@X0lbSj&4)A;a2$20E}{ZmMQzPBbYOz&=ytnneIb9S%Iyh7&L*vmfuiKg z3C%4*e^YzQHh&~BrOx3l4F-nlQ@)9JHV2wQ>rG?J7T+d6h5}oIO_9vZ$gBbVnOzQF zQ!o%I&+2sq1DpLrV_A-v#MyzyvscXoa$T7f)__J&cBIj> RHyUi(b0#LRIr2qG^M7g1ETjMc delta 3409 zcmZA23rv<(9LMn^zNp+(ZUJiW3WS(~nh2?hikB2nNX=BxBtbA!$xzbDM@2Ks)O-@V z&M4N(nO3B8Wv;0;wJpSIUPf%XiiIoF#B>nb-~UkVj1s@@FbI zgy3@IzGK!>>B@y|s0Ql%H%tTaXO3`)#3sB0f5Pr~6TKM5%X%*z)$l0P{d|nU*{JuI zVGrDhu~?6x^lv`551ha_ZnR(~Uc&?&z%Vng00-ha?1}p@8k zUStktAL{+1XgV144XWM72=cFy{Y*tE`U3;73nw}c;lOq<38)5=Q4Ob~W{_dcMgGiO z4!yAonY^h*t^K?9yaBaDN9^^+Nb;{4G;=|NYek)3M|JFBCux8|sEov*I`*QT%S3J3 z(WuPL!5mzHn)yLY#;=hk&F`oId1yo#438%NT9a5VXk=d0d4Kyr2J(&>ZtoYO8ZJhq zd?B(LW&>(~uUP9)?d?KMY(FZ4$50)g!j5>>p`w}ofa>@HreK>r4`-n?fH=Gp(@_oO zqZ*!$>Zk&>G*ze>u0&;K1FHRcR6FmZcK;z%JI-k;8u@uts@tsBPz`qC8`8i+QQv(O zY6e->Z0k7GbNQ$ar=bQi)83zt>SqxugUkKrj#*DdDco#t>_nw@4{8&gKy`Qy^?9DR z=YOGQ9>8=oldh-<#G(d}f*-Qm`=JKX%*&e4FQ|!J!Y=y$BiK0_Sx?kJl2Myw2x{H+xkW`OjAe(( zL>z_zR~K{$&w9gkkl>o{nM4xUN%o+Y$~jI&o2eBwlfSLO^r{!4Q8Vv@x<4G%@px1Q@=+a5MGd4F)3DT@ zZ$o9^HPl4+qMrXAnTTUrsA#ueLNyq`Q#ubqjj$K$g<+_fj6r3p7=1Ie_iIq^Z9;ub zJ24RVquxJ=1Mo{!KUaO%S^t~%LSTx22BFp{RH}PnAf}-*FxXztMy+81YKBFqOjTkZ zT!;F>+KqbeD z5mShH#4_SVLK}P#q0))amokjV)$e~Xl`X^s;tAsaWs<$H?Y0~DQoo1jNa&|kWsD!+ z516g`Hma6#guSrAsttL!>RSJ9s!+lRZIqV@ZM?O_a$*M&NqC9T#8N`#Nuq$5OROjE zBh;SC)5HVBMnaoZrPhz{pIJF|eLcSClc>xlB8XC=h-feUsXRmQi)@}FDu|~DmB~a7 zv4F@TdJ~mI8WBZkQ>%<5Y6$)0-d_5u|Hrv9gqTR^H@v-!qOy*-p9mnzi0y>RLO;Ia zqa5{_tt9wh%)>+qF_chQO{A;RUc9NLWtB_I=9N^HmG*VBf=9cng4^8ckP!`sLXLL! zELc=h?$$=S?%=2`?y;!18diqI*1cY(q@kh#>!C6^Xmu_@oB+bW)T1 HL2}7ICZ{WD diff --git a/sphinx/locale/hu/LC_MESSAGES/sphinx.js b/sphinx/locale/hu/LC_MESSAGES/sphinx.js index 2d347242b..856311d19 100644 --- a/sphinx/locale/hu/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/hu/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "hu", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Keresési találatok elrejtése", "Permalink to this definition": "Hivatkozás erre a definícióra", "Expand sidebar": "Oldalsáv kinyitása", "Permalink to this headline": "Hivatkozás erre a fejezetcímre", "Collapse sidebar": "Oldalsáv összezárása"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "hu", "plural_expr": "0", "messages": {"Hide Search Matches": "Keres\u00e9si Tal\u00e1latok Elrejt\u00e9se", "Permalink to this definition": "Hivatkoz\u00e1s erre a defin\u00edci\u00f3ra", "Expand sidebar": "Oldals\u00e1v kinyit\u00e1sa", "Permalink to this headline": "Hivatkoz\u00e1s erre a fejezetc\u00edmre", "Collapse sidebar": "Oldals\u00e1v \u00f6sszez\u00e1r\u00e1sa"}}); \ No newline at end of file diff --git a/sphinx/locale/hu/LC_MESSAGES/sphinx.mo b/sphinx/locale/hu/LC_MESSAGES/sphinx.mo index 63c64bcb6d890c26103062f9fb897d7a4b96042b..c0a8065943a42d7dbb0ab86e363179a798e16800 100644 GIT binary patch delta 1141 zcmXZaUq}=|9Ki8O(aY29^3=*whyD_FwtGQbr(Q>p{qYEiLxjX!&Ca8}+w0DQ3Ti2# zqJ$!lf}RBFB?7IUf*|NAuqb-4UV7;gdWfKc>ZSVrbYa=g{AOooe)F3t?Yk16{aNl_ zSfNx?ol>imQg?$&`SCuM;T&$lCs>UOScRXk0>2`U`oXIaef3JM!4{PH43zINFFu9= z;vtlAXX=%^G+=^`20HHGYJ7<6@fkMZ0?Loyz3=4=-bNfm>5rl$-h=XgA8x=?$llat zFP_2{;yL6|ZyMa?jzywoIx5(POt2Z{$KALVyKz4bVjE6l2fo6USjC_{Scj7MVcdcv zC>6Vg2k0Y5c-kjI2|NM;+uvml{G@;4I2fTtdlw29M)Y^kE~b9>Er* zNGgqT1Q)TNBc4P}{F!pnRF#xRD(h+*Wi&dl6=Ntr4x&`VMmDLgqm*tMx8ie@1Q$^% z_7~+$Yd0?MPr>%$iM*Gld~~V26mzB>=0IBzxVwFN&=_7 zxZuSuN6@F%Rocqo~-vIW~3ck)r4 zOb>bZ6mwF?-HQ#Zwt8ZMTm&nHb}@|NPIr7Fa#81GQdR_15<$RNRFX=tqr9 zR2%320!cb*=$OTFyn*$22ODq+HSw+c{VTQ-uetqoOjhFUsQKO4h(Y9R=DZu{a3AqJ z@|cG;&Q`}V(Ox>fp%y6MIGR|Ad$1Y%u@^hg!NYhTcj6E1!QZIF+nCghHmYJ5Foc&- zm3)F)|Aj*%K;r|JVQrl;Jf?*gUB-{vU=(!~=TMo?;TYb=B3#D^ZXiW517x9+kK-w> zcnU4zmy}ZpuA(aIZ1OIoQBS@0V-sp(FRCID`~F)_Z`e@Ke+ke8S>!8f!GV@UJ?slTlj0hx$q4s11{-geI{Kub?)(hx#`b-1rTu zQXdyrir#yi(;<7%8%ubDwskz=i-kMRB;p}YG?~kLhqK9aZaSIIWPR4Lk!aM4+p&<< z8;aTCXuu8z2SYs?{F$PLU|cjBn4av+WGDQdSU48)j;6A? Z$xPa39qR1z9L=QjsdV1E*jKeu@(;Z|hARL7 diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.mo b/sphinx/locale/ja/LC_MESSAGES/sphinx.mo index c2bf5ac21f5ee916d5ca0d53eab8c4b149ad6034..cbf79dc242356e13aa11dcc55492c9053ce10807 100644 GIT binary patch delta 2807 zcmZ|PYiQP09Ki8ob4%CbZMivTbC0@P9 zHA2nH)M1oqutwtLjZ!1B3$hnhLrPp_Xn|&C7p+M9ez!xtYCL;B=lVP6{LcUXoLkVj zFzGJn`&!`d0RMOKpUt)Q-`}SE5K>e(;{a?yhaAMw*pB`2bo6ZOzkqkrehG)*EgXtN z?g(KJRw8kekfC7US;!~U^5uZVI1pE&0oKO$SJ3gT=mKq6gdI2-&!F>uz%*V*=NGdY z#V{V-a0ZK5Kg^)u#6>s^m*a4J0bQU4ORyb_@l)gz&husePw4m@c9p?WEW<3`i_JI* z-^LO66&B*}*q`-7itW0iBJ780oQC6KeK|5VG~w--paC|Z3+#>kpP>i&2Ho(_XuK5Z zG(&~xI(Oqj%wUp7VLb(|Cu~M{xDzMi5%jJvBeB9YG(aC$=|eivz$xGYT``3Gdy*y^dQOA}*o&j^5VB_Y98LLmv3?c3%TUnUo zv7SK}u0c0A8_h@-U2ky#`FG-K8hrYnM^m>OXW}vRqZy;3!P_P zDTaLXZ7DBLMI{q-af#c}LI%0n( zy5JXRs?WvxWi->j^|W*Uc|5{iK_U9ERigoG(1mBC@Am_-UXNy^5k1*+=!w>$^R}Q1 z@4&UZCHv6%rKH30lhFg$;Ar3fITTFUQ_&<2*oItpXhE-{J@$8?C+Ld(7tsa&MAiyJ zsn|aOIb^sGd49u#=s}kuL&J-h__ViB@R#o>x{*$_{XCAtzhi$DjrLDRQ<_DuYAG@# ztj99khZWd?J|h>=aXGB+xJq<`Ge+?K+fYlxcwB)Q+>Qq7jP)PU*Rh;v{w~yGIlhcu zQG4_#n)(y?7@kC*iE^H7Ph5>&!91iZWJ}4vKebIXc(QkqwZchs;Zbo@Y0*nSJW!V-32ynCVL8)`kLH8Pt?D% zH}GIIa7lC`=24%4o@`EZ5gMl+9p4=58)E-9Oq}p0g*-fhPB@NE_yj%4*;v1TdDL&9 z<8GlRPjPHhJOO()fX-Wlj$ab{m!lb57k#yg={Yp)p}~~wLjxQ`Cw{cGF25`{J+`4S zz4hv_imiL{i;5~%hl4XYXtx986q@bAdl{~I;6I6dee8~F#; delta 2718 zcmYM!e@vBC9DwnoB8Wgqcg4^AE{d1g%z+WgCrQt$!rvkLGGUkN0e`%l(|+=X<{AeQ*DY^G(TL zr={%+{2k=Ki2sEXt^NPkGC72)R9i6%pT<&r4l{9o^bqDy{{(aKG-l&Z==@Q1{w17( zn<*n>6Lk25iiDCc1rR^uaBh`aGtd>;*@ zH`<4js1ITt`-gL}A)n(=3?-O>cc2T@q8lua{oB!#yn+V&4!U43deSrKhQHtn9L033 zA>U*_EJ6cpF#oj_9;e{7cOhfLyXXSl7{-Ng5?#2LT@CODG$X?}9xuoGHB6&Em3wf0 z4!Uk3dXSQ6EjoXB4*4&ku!aWrdI`yD=#2FP=v^L-?Y-y;zD7Rb$5`LCz&1Pz}2LoCA+XoTm{fX2`i{)=ACL^=&D3#}KR{Uzwr ze|zj-gsyuZn(|dhlESlSfG;Owp#xp;btL%k9-6|>(1lOo1nfgk`c3Q~Km$036*!EJ zpF|Y4XQLbCp@Aj%D#rQf`pE|=xM3?AzzH)19AJ+c3DOgdnIf~gxpBff-u!gN-fiPcz+&FHhR86DS& zjysMXU@+E)v5NY2ticMRbe&eTz7^~7SYdqsuhLLPLjkLM6?M@iXo{ENYFvrl{W0{! zr_odoA)he9R~?Sy5%*wsAxnpq=)7mpyWfV+?kNjwA&;I->i~JMTj8xCebE`jEB5 z5c-SxH@Z+E6|x-eL^oO%ZA1IFp$B*^*1OS-ze3kfeow&wMlgYYqN$q71>d+5tfpRv z4Y(d%_(bgg4o&eTbiwRdsr5?Hbt=)6*Pt6Ojs49?;K}fC9Iz3cuszig_M&%q1P$<1 zv=7~|Ki2<1H@FzB;E)Bop=G$aSZLh zhGs06G-(1S;2bm~)#&`C=)8w8Boc}GHSKNf3lin+A9p66KgNs3UZ-@it@5sFk4>ffG?KLaZTSHi8+Wp)hFX)J~3D1#vMD zGIU*ZA&`n=5EO{G4Wu?vizyISL5m`6A?W|%92n;J-Ol$t-+RvY;rqjH+REH(X4X?@ zR)Gsxjs-l1&+rwlp@Z3avn1X_&A-FgezVVbf&O-*SsR{hGV8(-Jd6eGM-QuTU(_sw z;i$P*LnF$7Jdb^t!ZY{)2XO;0V{6QeGwe2!$?|v*Jv@S|f#0y1{$JGkqja=?4=UgQ z>iOAbmrZFrVL&(kguVC`Q+WIY>2U%HZ%zwgu^p@NI(FbKEX5_%%^stIy~Z;9fI4s; z!?=lh?!QYz2@`R@r2R-}8%L&WG3dWXRiub2X=TC>kU$-r!~@uiC3poDOA5qD4rC#kQ#jZ3KgZlD6^P|q!( zUd2P?=bFd=AqIX16TeX#m$duuz5y%f&!9G#5Bi0`7pM}ipf>)9s^}NgP5%YsJE+Q5 zo%Gk8!$!+cA{w1cOkp2BM=oQ3P^F8U@+;7R`ubDYfQv|0dy5KKM12##Foe6P03mO# wd?lRk4yC-Ob!jI&FnaS&W~@HeGBTN&&W-1?qw(o{O+1}{SzYTb$Cpd@0I(Zw`Tzg` delta 996 zcmZ9~Pe@cz6vy#Hg~O;JR^uFQ!9|?L4;aR)5wk;h19krmwyrVzj@`sHF|&5eVi#V*O*n`BxQrXI zF>Y3eiMZvgk-hF5_mb1pdS};t&_DPoeS; zpb9*PdVZ=cXSR#MJQLcv!=t!@$1$_R>;dMH;%!^Pj9RQ0>+vjR@G@563~Fa(RAEaP z!gr__e#Gs#ih8aom-H*_!(JxFkm79?S!0zT{)_5Jbf@3a6Q}|%pkAEEwK#$6a1vF> z9aPI7;dxv@t&g(n4VX&?g9F&WL_ZGU2!?SHRq+z;#;>Tv_4IKo#!!X#pkACuosDr+ zzQ?FD@B;PRd(@}+g8Xu}%5^;x@ecn+Cn|9t>f4{eT6~R4@HU7)2dtiv;Y7A diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.js b/sphinx/locale/ru/LC_MESSAGES/sphinx.js index ca0376ac6..294b82f96 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "ru", "plural_expr": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", "messages": {"Hide Search Matches": "\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Permalink to this definition": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Expand sidebar": "", "Permalink to this headline": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Collapse sidebar": ""}}); \ No newline at end of file +Documentation.addTranslations({"locale": "ru", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Permalink to this definition": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Expand sidebar": "\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c", "Permalink to this headline": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Collapse sidebar": "\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0431\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c"}}); \ No newline at end of file diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo index 4bdda86bf99da0f657727d5ca6153abfdc365799..ccda68f2547ea0434556d43b734fc5492388d99b 100644 GIT binary patch delta 3420 zcmajh4{Vh69mnxsffl5HpzYn27A#MxEq7(D&mI3trBo|oX1WOrx(&qbY5P!a-rZB5 zyLRhFylk=&XIwI$5!8q-Zeti@)HOuozo8hj4Kf;WTZqeC!b}`X*d&Nkx48G`?qM5d zX5@OW-|zSQ{(OJm-|xBb_pJwRF8-lm&OXDxhxuE=U!+pC|NN_&Z%hrsQ-iMm+5Y`$~G>0iv({MEGa02V7zloaQY}l?&3@{5( z3$$VkQ@9X6jT*NNEli`ve;4_f2l-OKhfw{0hE1$*j#AKsZ(s}l6&K-r!c?T~eCfH3 z&A1WQ;H|h6_aQ^fVYKljT#V;1igiS-g|EPQ*n=Bzt?I0ACMobSMZV_ZJ*a{Ea1}m= ziujMH0N+7PRKs>PaTIUFrC5a?k~A}k3gnx(77w6~@HfcEyunvd6P!`4!kF`@l)lSB zv4*K(Rqeb5XJJoRPvRWv*P+JWfSPzKD)4Qg!qS6*l}C z75N3!*;VkRdLwGVR#af^s0<`g3-+PRdhfSIXa~ zL1$ReP_EaaIz&;ocM0lw5;ajjDz!sMtY#M~psCPrq59vAOl|g~GW95G-f5hT&lV|Y zXD^}xIf|Wl3`-HBCVD@7UP(SxuSNB5MlIZi3bYF^#{txWJ5T|Pp~g+2j_TW}Ocd{? zpp@N*3gj?q;IpU+UqQVMr^5Dgs0IIlI*Lj<$wt(~ZK%MOqkbo@4BJ14+Rzt5zf`tp zc2dxQEGmErRAgT-cQAWV3w{rk`u$=3AS(4wgzZOAM{)vnr~ZPP??cqWx+r>m=c4Lu zSgrRzPC+|fh1$sm)W9Kpfwy7{Y9|Yt$~#P<>b}&$CE!Odj<%?L{s85Hgi{ z2AAWnae?0d3ly|)6?xVUBB%*$TE~JImn}cn9|2k5Ci8hRV>}XyJRP@rzhp z<89PN2a%+hAuO(-;80MQ;W&JI-aJ1kD1F&vXHmC(HebWo zhFV|`DzNY4AU=gzJRd$EZY}>*d#&VO1Aa)u1o)R{hlYw=gO8fUTn4(tuR6_wdNsEj^Q3=6+REpQr@s=uKIR*(kmWI1Zb z*N636Pz&!y8~36DdIqn=W7v%!;ucJBVTj3m1GVr0)O^LKDQMy2s3SOqn&@5B0`rI> zg^j5CCe%b*!uC9B+(A^}FQYE$$*}!2YN3yi1=NupM`h#;Y9ou{+BoOmPGNus z8|UCS>NS}_`kEqY;-8`xK8dB*4E5T+7h0JpXRZ;IkxslC2eA_G#CdoZR^h!^!}{ia z74RS`_0y<`Uk%&;gxcvlsD)>Bl>@0q-HlFE`zBn8H=&N;F4TtZN6r5bl05SmDuCBe z|BEuGC}@JWP-lBS>=0WKyjs0E){!?Id5h1eH!_iRa|Nf6_Hsc(&DpNewC|1-(vxmN zUE*UIZ`jFLla8NuhBL0^`PPV+%NLwnA^4zX*&HkGd(*MnxfRv%bWSr)cH|S&OX|*7 zR_^k>ujYfg$jR!Alh0dOx3J3_4c?5j){Z&_$6Q<}SQw23_0jGYmdfWHf66Mje%6fn zPB!cKR>8Z?4c13jH8>-_XR>Z~*!7__*F-e6*7MV2=^P=l3xCRt`|f1go5=sWV2$i@ z#+i`@Pjgz{cxkUkqL)W}cc<&Sxe?dOIKytn_+G{hejjbGcU`t(^5A6h9_8Sl(H}%p zb~4qSw7XNiRwC&(v?5d(aVXYq;x;m5Y@%*t3^EYQEd?(Yr$@8=MJ}Wm~ zs^y*_DMyLXp| z(8o?NCTaD}wo-|En^w=BDC`V+o7$VNcXO`q6x`A7!KprLPi%s;#BVFuk<%OhwJe ze_w}r@oVZXxejhH9*^_4W$`E9hg@(ZetR@qx)C!!pLucSxtYTk@5H*qSL!ak6Tu^i cHFY05{of^4|L@bU?pocTbN|@!4|J{j7mGvk&j0`b delta 3279 zcmZA2c~F&A7{~E*Q;*itiGUe2m*`$r-*o<1=-@UJm(;1%oIpb@x$iF2_()+4u=ZJzTkV|G!A;J^VKgJ*Cc-p3Ri!0e*17(;Ox>d7~ulGKcuXxZ)a z$gSog_QdO``~JW*?8#$mq7yNa@l6pGb+i=Ku@g&hJ@&w_(I3yFCUP0a;@_wx8AWgO zZN{SR&r|OXV`iW-Hj^}ILQ7E@X~f5{8C^QiLWN~Fdr=*HgzESpYUW35&!Vosim`YH znS<#ccx3j3~FNesQZiU^W}EC(q$i5i5jpG`7=5`0N+Fn)P@@P zb5uv?P)qbZDnmaYf95_v+T}r{QTHXI`b|e&pNX1a4(c^_6;ja*Yi%3t3pSvhs0o$g zX8Zixs193gKSpKjAS#0$sQxaa-m0Ha6M2AIYF~Dw`VGS@2kRe2MKhVtORE{WQ0*qv zK>KYEp?33UsE#|4KFtjriVhxIn=cVH(0J5@@{!dti;+vs8dN5?V<6+3y;KHs;1G_$ z3#g8L7)3Wkp>7zBN^veGW4V2PE9$;hOu}za*WX3{j6XYf6b{B|I0yB8*^86({&!G` zLkH8P}jMUKl3L)ya=W*8$ie7FbDH-7`}>nO^>4{ei5~&Zeb<% zq2ba1PAZzwMx2bTxB`DfoiBOZ`z4%@YPaAWJ}~cK8SOV>yi0Hm$IuRBR9%;cbYW(r zChA0e54NC|YOKoK@lRY-v};ea?@%m3*K8{K0`5btRU0Z3ZqySzz)9$r;9au-k zmE`@zMxZ8;g-Ue^_CO~(uz+Ay|0|lLGQQ4pg!P|B@J;{Qbx%C`?LM}0^15qgHuh<-#Bp`vfYVB%?Fpt1b@XIKsXzgn*aM7JLfa5&mKdfoQ1 zP6TyYyMv>x)4|zRY)Gn4)r!ihdaEiVHKMM*s+|MO_1D&xH)w5jx09 z58V+uFE@ME@S>98IoUB&OEQWIlFLhqbFE9E69yJ$7w4B{=jX;uEG*1gUNfS$zB<#t zuwrHP>Wb>Bj2LToSbDdz(mbm(EY9i^UfJFpUg@x+BNEz+Bi1?EyCN3`v}X*t?yyo4 zvMg7^S}QoQ&ewg?{e}C4`%`OI;xemWQo3*FW_KHh4qNXn)P$ixPJla C+fbYU diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.po b/sphinx/locale/ru/LC_MESSAGES/sphinx.po index 2a82d89b3..c954178ca 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po @@ -3,7 +3,6 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/sphinx/locale/sk/LC_MESSAGES/sphinx.js b/sphinx/locale/sk/LC_MESSAGES/sphinx.js index 2d210b548..9c2d6a75f 100644 --- a/sphinx/locale/sk/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/sk/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "sk", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Skr\u00fdt v\u00fdsledky vyhled\u00e1v\u00e1n\u00ed", "Permalink to this definition": "Trval\u00fd odkaz na tuto definici", "Expand sidebar": "", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "Collapse sidebar": ""}}); +Documentation.addTranslations({"locale": "sk", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Skry\u0165 v\u00fdsledky vyh\u013ead\u00e1vania", "Permalink to this definition": "Trval\u00fd odkaz na t\u00fato defin\u00edciu", "Expand sidebar": "", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "Collapse sidebar": ""}}); \ No newline at end of file diff --git a/sphinx/locale/sk/LC_MESSAGES/sphinx.mo b/sphinx/locale/sk/LC_MESSAGES/sphinx.mo index 8a4ac3a8723deb8935b82a7626702452d6d1d043..db5f222dd1147581c5ab867374696163cb2844b3 100644 GIT binary patch delta 3661 zcmb`{e{5Cd9mnyfl?p3R+gqVO=#RsswMs=mGRqx`Z38YF6Hz-xl)>q}r|p4r?`h7t zy^KY;EG{w2!ZtkFbVIVKQG;%YTKpAsS=O2TQ|pqAu;IcWPSOlwP*J0E)Ay%+bekD5 zS!~+A&hy;o$M^X@-*aDD{p_03@zjhT8GiQj*Tmns8EXCeXZ&-<%%S-r&c$O`fs^=o zd=2?EHI>sYKz-hZwYV5-a5Y|x8}K3=K-MjpA`e>l4xEkq?0^GUMf;bi1)j706R7dW zQ5&4W`KZa&P=}h=fev1cn*Vj=*KFgT0xn`T`-O`1 zVFT?HonOFCY{d*N#XE2T9>RI}d(?)fa2B4$Yw=yR+23?=9G$3}e=~7CYT`y*fjQL4 z?nebSidtv_weV3~k0{dvFmxj0#}9hWsmKf2KpJ zKY?7YnY8V5sL$U=Rqq9<>Cfv?3ob&X_$nj@vmO=LR;!O%FG7|uyHOeYA!^;9mUy^; zhx4bzp0)5I)J98C8()XInsulX--OE07Sw*F z+j-E$Z=)9c9;)hpZu_4_Z8(NX{kZiQYT-##z^|dc58k%@4J@X>TdnQZD^TNCAOV!j zDjpPBw;gZ;YQsKMioapoIaG>^w*O94>VJ%?p(ju$`VDI1-=SX93Df~6Q3rSfHBN=| zw=(X(f(HfgcS>Ia-a%D+1z!p}(JWLzi>)hAC%*_dr<5Cz^~`+kObO!C_P&O>(b-~w{Z=62iOk9yx9K&AXiG>+r+xUmgcbRF6 zosPjE>~{mF=tjQVA9zj}IhimY7u_dxsh&ozBaYo@r&I8voEePV zT+WS%e7l!iQoADMW}?vKyj;H*fp$o4t6g3dM*g5r_?)j0?M(L8E~pxgLd|x_OLkiyc71v?vUvv(;PoezSi)^^B2!$jXmcpo^4I* zK7-;p)Rg|Hc+NC;F0sWE_D5s)eJkAlY4x+PW%K`EKf7A4TX6pR$tTaXtWM>oD(JU+ g121n2=&sh4pRAv**3M7XPp0+K|5-oDcU#wf2L8NjB6}RmIrMoO;TM*Q4LV^d1 z8Yct^35bbAqlRMx1QJrTh%qRj!AAW9qCzBsF?b+gjedXI!8qx&pLyp!X6Bih9-DS< zQsiQKkL`xiM&uF6J&gGPyAt@J97r@K1rK68wqqfFjJ@%y^HBqEjS*F5QPB&_u>ixUCE1Ql-n{Lu54r1)Py;=OO8vL) z`Z}t^KT!kgLS-tEhxB{~YLDfkGBG}l{A*GRX(&QJs>7|QjO;+AayM#i_qpps?*4Jq zCi~Fc??ip?dsGH*AY(8o>D>d#cMd^)uQZ+f^Ng85gHkjX@4>~WnJhyMz=wme(OtiW z1Gs(z_1+QGcTS={{3R;Y7f}PejM{X!QO~E7Ze=DfLPZY_LUl9@b-YHSGO*BD>+Uz8 z1{OeNs@dIdLw#_I^A*(0cc3!y4(fZSP@DV=Y9Ns-RJ2yVpg#OJUS^ZUF>JN}$Oh4- z`U5qvTd0n5*@3bMdBv0 zp>*ySpk@+ArRqi05?QRoU8oK^-Tj|X1Nj~Gp7J~r`k^K?6P5Z!{M2AG_SN}6O+_i` zM8;sg!(zOR+8ad-`y>{lW^xU+wuwxWM@%kiiN>M^UXEJI#i#+*qQ29J8d%7=1tZ#> zyQnAw2T<3Ys1B~7M&9MFlgPgYnuoC^K;5rIWoVYWUVz#gb*{Y$^?#)mwUj%M)ij6m z$bS))&s@U|REm4?luSisBpbDROHmz_p=Ms??k`2MZo;npWz@j-p`JhNY~;b6Y5;YcO$WY7)wkd)Y(!(Sy)Rb z3+nLyrB>%(>+dC$=5j(MNUSHyh&6=DBH|fBXLl3v1W`?>JWDhY!*tOB3PMH8aktE&;wP55h9~g>S8s5N7D7i+ zWdyO3(DJDN|B5yc2O#!eN{!7#n7E&)BvujZ$JhoOgFb?jX_gS$J31*<#6V&>p)$0a z*q#|eUH>QUmPe>WwEI;Sc4H|r>1k7=JJaGk_O0~to{d4@N`I}5 zO~~Oq0zuD25S&1GywtuD#CM8AR%g*-L)SS)~f1oL}zT<>9R2TNGvMIS2qIYtu z;_UqVInhh`dxduJ_j3f`UxzEf{837EFvkwJqRZV~-Y8*neoL LC>(5C3a9-G1?MV< From 10a65f62ef96702691535798d1e953a2e7ab06e5 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:22:53 +0100 Subject: [PATCH 045/250] Linkcode changelog entry. --- CHANGES | 2 ++ doc/ext/linkcode.rst | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index b7c269f86..530e8459c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ Release 1.2 (in development) ============================ +* PR#47: Added :mod:`sphinx.ext.linkcode` extension. + * PR#75: Added ``--follow-links`` option to sphinx-apidoc. * PR#45: The linkcheck builder now checks ``#anchor``\ s for existence. diff --git a/doc/ext/linkcode.rst b/doc/ext/linkcode.rst index a4ac394c7..f05a46f92 100644 --- a/doc/ext/linkcode.rst +++ b/doc/ext/linkcode.rst @@ -5,7 +5,7 @@ :synopsis: Add external links to source code. .. moduleauthor:: Pauli Virtanen -.. versionadded:: 1.1 +.. versionadded:: 1.2 This extension looks at your object descriptions (``.. class::``, ``.. function::`` etc.) and adds external links to code hosted From cc98245c42c748ce0e34518a8e330d2b631266e2 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:33:09 +0100 Subject: [PATCH 046/250] Some more changelog entries. --- CHANGES | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 530e8459c..193713226 100644 --- a/CHANGES +++ b/CHANGES @@ -15,13 +15,15 @@ Release 1.2 (in development) * PR#52: ``special_members`` flag to autodoc now behaves like ``members``. +* #955: Fix i18n transformation. + +* Handle duplicate domain indices in texinfo. + +* PR#74: Fix some Russian translation. + * Update to jQuery 1.7.1 and Underscore.js 1.3.1. -Release 1.1.4 (in development) -============================== - - Release 1.1.3 (Mar 10, 2012) ============================ From e7ba8c364d0a67f5e7ff711474ae242f4a772433 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:35:01 +0100 Subject: [PATCH 047/250] Changelog entry for PR#25 --- CHANGES | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES b/CHANGES index 193713226..33d9000fa 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ Release 1.2 (in development) ============================ +* PR#25: In inheritance diagrams, the first line of the class docstring + is now the tooltip for the class. + * PR#47: Added :mod:`sphinx.ext.linkcode` extension. * PR#75: Added ``--follow-links`` option to sphinx-apidoc. From c573d61207effe59ec21984820bd278a32472660 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:40:52 +0100 Subject: [PATCH 048/250] Closes #1015: do not override the jQuery contains() function by defining our own with that name; rather use the one from Underscore. --- sphinx/themes/basic/static/doctools.js | 12 ------------ sphinx/themes/basic/static/searchtools.js_t | 4 ++-- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/sphinx/themes/basic/static/doctools.js b/sphinx/themes/basic/static/doctools.js index d4619fdfb..38feb6c54 100644 --- a/sphinx/themes/basic/static/doctools.js +++ b/sphinx/themes/basic/static/doctools.js @@ -61,18 +61,6 @@ jQuery.getQueryParameters = function(s) { return result; }; -/** - * small function to check if an array contains - * a given item. - */ -jQuery.contains = function(arr, item) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] == item) - return true; - } - return false; -}; - /** * highlight a given string on a jquery object by wrapping it in * span elements with the given class name. diff --git a/sphinx/themes/basic/static/searchtools.js_t b/sphinx/themes/basic/static/searchtools.js_t index 45989c6ae..8e8acb8e0 100644 --- a/sphinx/themes/basic/static/searchtools.js_t +++ b/sphinx/themes/basic/static/searchtools.js_t @@ -150,7 +150,7 @@ var Search = { hlterms.push(tmp[i].toLowerCase()); } // only add if not already in the list - if (!$.contains(toAppend, word)) + if (!$u.contains(toAppend, word)) toAppend.push(word); }; var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" ")); @@ -217,7 +217,7 @@ var Search = { // search result. for (var i = 0; i < excluded.length; i++) { if (terms[excluded[i]] == file || - $.contains(terms[excluded[i]] || [], file)) { + $u.contains(terms[excluded[i]] || [], file)) { valid = false; break; } From 67aa6029e8cd61f0fe5426ca3312d2d9e4fe44d8 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:41:21 +0100 Subject: [PATCH 049/250] #1015 changelog entry. --- CHANGES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES b/CHANGES index 33d9000fa..c6530941b 100644 --- a/CHANGES +++ b/CHANGES @@ -26,6 +26,8 @@ Release 1.2 (in development) * Update to jQuery 1.7.1 and Underscore.js 1.3.1. +* #1015: Stop overriding jQuery contains() in the JavaScript. + Release 1.1.3 (Mar 10, 2012) ============================ From 2efca93473a054876d42dbc71500e43d2b21c907 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 18:59:47 +0100 Subject: [PATCH 050/250] Closes #1028: Fix line block output in the text builder. --- CHANGES | 2 ++ sphinx/writers/text.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index c6530941b..99890cdf4 100644 --- a/CHANGES +++ b/CHANGES @@ -28,6 +28,8 @@ Release 1.2 (in development) * #1015: Stop overriding jQuery contains() in the JavaScript. +* #1028: Fix line block output in the text builder. + Release 1.1.3 (Mar 10, 2012) ============================ diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py index e5ab070c7..862c5848d 100644 --- a/sphinx/writers/text.py +++ b/sphinx/writers/text.py @@ -71,6 +71,7 @@ class TextTranslator(nodes.NodeVisitor): self.stateindent = [0] self.list_counter = [] self.sectionlevel = 0 + self.lineblocklevel = 0 self.table = None def add_text(self, text): @@ -593,14 +594,18 @@ class TextTranslator(nodes.NodeVisitor): self.end_state(wrap=False) def visit_line_block(self, node): - self.new_state(0) + self.new_state() + self.lineblocklevel += 1 def depart_line_block(self, node): - self.end_state(wrap=False) + self.lineblocklevel -= 1 + self.end_state(wrap=False, end=None) + if not self.lineblocklevel: + self.add_text('\n') def visit_line(self, node): pass def depart_line(self, node): - pass + self.add_text('\n') def visit_block_quote(self, node): self.new_state() From 0fd6ebce6256849403c095b4fce6217d8707e312 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 19:01:51 +0100 Subject: [PATCH 051/250] Closes #1018: Fix "container" directive handling in the text builder. --- CHANGES | 2 ++ sphinx/writers/text.py | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/CHANGES b/CHANGES index 99890cdf4..8821d31de 100644 --- a/CHANGES +++ b/CHANGES @@ -30,6 +30,8 @@ Release 1.2 (in development) * #1028: Fix line block output in the text builder. +* #1018: Fix "container" directive handling in the text builder. + Release 1.1.3 (Mar 10, 2012) ============================ diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py index 862c5848d..e62c05f47 100644 --- a/sphinx/writers/text.py +++ b/sphinx/writers/text.py @@ -714,6 +714,11 @@ class TextTranslator(nodes.NodeVisitor): def depart_inline(self, node): pass + def visit_container(self, node): + pass + def depart_container(self, node): + pass + def visit_problematic(self, node): self.add_text('>>') def depart_problematic(self, node): From 20e5574c544c03369e15f4482f64ed617898163c Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 28 Oct 2012 19:03:36 +0100 Subject: [PATCH 052/250] Closes #1012: Update Estonian translation. --- CHANGES | 2 + sphinx/locale/et/LC_MESSAGES/sphinx.js | 2 +- sphinx/locale/et/LC_MESSAGES/sphinx.mo | Bin 9137 -> 9429 bytes sphinx/locale/et/LC_MESSAGES/sphinx.po | 103 +++++++++++++------------ sphinx/locale/hu/LC_MESSAGES/sphinx.mo | Bin 8198 -> 8198 bytes sphinx/locale/ru/LC_MESSAGES/sphinx.mo | Bin 11037 -> 11037 bytes 6 files changed, 58 insertions(+), 49 deletions(-) diff --git a/CHANGES b/CHANGES index 8821d31de..6152c6558 100644 --- a/CHANGES +++ b/CHANGES @@ -32,6 +32,8 @@ Release 1.2 (in development) * #1018: Fix "container" directive handling in the text builder. +* #1012: Update Estonian translation. + Release 1.1.3 (Mar 10, 2012) ============================ diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.js b/sphinx/locale/et/LC_MESSAGES/sphinx.js index 5f51a53af..abf00ee5e 100644 --- a/sphinx/locale/et/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/et/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "et", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Varja otsingutulemused", "Permalink to this definition": "P\u00fcsilink sellele definitsioonile", "Expand sidebar": "N\u00e4ita k\u00fclgriba", "Permalink to this headline": "P\u00fcsilink sellele pealkirjale", "Collapse sidebar": "Varja k\u00fclgriba"}}); \ No newline at end of file +Documentation.addTranslations({"locale": "et", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Varja otsingutulemused", "Permalink to this definition": "P\u00fcsiviit sellele definitsioonile", "Expand sidebar": "N\u00e4ita k\u00fclgriba", "Permalink to this headline": "P\u00fcsiviit sellele pealkirjale", "Collapse sidebar": "Varja k\u00fclgriba"}}); \ No newline at end of file diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.mo b/sphinx/locale/et/LC_MESSAGES/sphinx.mo index 14b911c0eca752bb20710642384bf825618c9d55..f37df8ec885b15f282300f7daeeb67d9b1b623e7 100644 GIT binary patch delta 3496 zcmZA1eQ*`k8OQMxlTZn%n%D#q60+n?62c|HCf1N)2sBarSoDPnQ>c#qjra{%iOjDAv_~|Mrv^Q_AID{3t$*dgN)W$HO=m zPg-BI_y2%b(*Gwc!w>OeST@g?%dr`mH*dOVXyUcV$K1@99@v7HVH!2TJ+}XgsOJx$ z7C3~Jcml7$)2MOh(80f<#xGzsnx+*Ma2HmxzFAE}12^G(9K|a90&0PWu^JEK0(=4a znBVfH`{z;57ZOz$)?ytF;Kwn-cKik|#4}id@8ew7H>HHDh$`_?bZ`~6*y~Z`S+gBK zf_c;g51r>W4sOKk80el}7*a>_8Mbv_?pi2F^y?zT->A%kOv;T8A z!rFog)M4vDP1uWC_&U`4eS^IoK~*F`Wp+0zqg|+RUq&tbReX@Qi4`cTi` zjP-i|@1UWH?z8SeRb(F$q5gN@kAY^`_`HsRf<03SyM_HESb`zk81-=ogNySNtr zj;crxCshe;Ks~n^HIG+A{X1#gLx&ss1pAiwU=+8D)lC6qC#GkO<0b4{q96P z7oak|3%hY2>P(zORp?i!M9<;`evqf35*}fcGI;?>-n@bucpeq$1=N|CNBxvx8R~FW zq3%1Vid};$`EA&MW2k^1v_5G)ib^>DL)&=C`Wh_Am^A8HGJh6?Zus*)cf3FplMMk$j9R0Ud55qF|W`bm5L2Gm&@KrJ|e zDrtzEL$eDN_yN?oZ(6^L8uuf6eF`=IG|pjt^R~Tl0afx3?DZx53Mun>s4ck?wLk(D z@M=^E*CD%O2Jk8jQ2{)H%Jd*=&wqg0!k1AMc@=g3%vlb?bf>AdZ^7MeypUsSALN^tzbo%@HnQ&r%`Iia{I}%sND=QoMA6&I!S^KriIy#+> z72Ta(OWUt*Z!g*ChS9QttQ&+WH_BwYo%Q2x*108}N%?`(lS$@Mt7+wSBs?!ZTY0Rh zf9hb?54=Geu|MJlUXUAZA^I`TO(p&8oo*Q4UecTxPB=|#oTkmDNv*+|R;WD5Y9_Iy zO)T^?q;_up=L+T~m734(`1-1z(*Il~=!mNZi)T9Gx2yUt>&+3YKXu$6$%Wos-LTia$)3! zk-5bWL(d!asd{eMtaW<(*E{K4E{+zq#ZN5U_5Z6cujz>0nzpj_wixE$jrggWrOnPb zVLItdW;mDfm(S+3d|NI^Ml*@~PT;5gMEr}IOo1D(u1)fNsP?`1Ym0Wr&2`r{kNbY) zgkCD;r95ZY+vW$p9hmY=|I}pY>xp=Gom&%49rVe7ibRn&#>OOb!)^93#IM(l6{Wn< zDBk4ktcc9OXf|_KXl|T3o^yl1GXvge{EpLBkcg`nU$w|qzI*1Vb#HA7w>sg}WRMA_ zCZ{IT@vV!`)Q3~Y1I~`0%sG*lP5Xfv$-3z@=QQa$X--Kp-dO*9@wl7vlkxn9t!3k` R8@W{4%r=s4e1F5ze*xBf05kvq delta 3214 zcmYM!d2EzL7{~ExDHTew77AUKw!9QdHEeNiq8Xs;MjO_Q_zKIE9pLw3A?%HS#FWA@qp zo2ZQsqXImJs>qk94ZlatD;YKTkXN887a2wUJ88^gK$)*cMYa_c$kV9O?MEHSYp8(U zw*8~_`X{KT{R?~jG-|z}ET&RdAw@7zRA3#}1$i1;a4{03xd~OeRj7?`$02wRD#Nw* z`UX@$n{f&jQ1>6O%;OJDx=yK_BWFE1=eU8cX&5KTkvN^-E_4h!jZm)li3h)~ot@rTUZ86~Gv>&MVU?G!*G{Bo;FZ zbwd}bbRKHKKGeqBu@0ZZ3HToJz?+juaZE8c&%hAs`sLV&8En9ZQGvZ2w(tKD2K0XZ ziVCQRU3K;&aW0NQRpL5SU+8dRq!aPBA=lu`y=YeN_e74-i$;gJf(*E zFQE}-K(E<4)B+EnO0^AnP)$GT?B7QP@F6PGuW=9lg{s_c-Z3TeHj;}uf|_>{73j~X zw_yb3Q-YOw8hZN2p>A++GPa^heLYUXm8gw3q0aIN>t0mA1J*;kz*s13_G z4+UC%J?*D{UWl` z`r}dany_5&e+vzjqyroA8q|V)s7%+R&iXOb*}a6S#4E_Ln|DzQev2yUDb!K@fqHhz z`7zMEiKvP-qVAuLXWsudJFp0K1YOvS-KdEhty@qNAF)1x3Un80<9(<~y<)E)w&TZ9 z>wb=^$VpUyzhPbv$1t9-1`MIjZZ_(vU1YryIc9S;Du7#13*Lnaa6PKD58CUGqBeRG zjpI0-uJ8HnPJ?fpa}#ODG@QFUk@V7T$~!N(IW#UfTvoHEc*IvldwwYom+om9y>7^; z=*p~j{>-Iqt%qR<99XmM~Ry}(`b5pdfsd=W;+}z$0of@4Ujg~ER{ajO5 z)=m3KH|=JKN0&cy5NS; zlrsVC3td$-yuo*RlCJM3f~xSWARjI*wcVBBF~O?vqTrqIMM3Mx*)<)>c-nJ%64{$Q z$Mt)cI?LH3;X5Q92{PjkPKvp?UO(sgIkPz7`<}NVkz*ugE_OPunD3-|dt+{}xF%8z z`I>u&Uz}NaYc>&Ikqaton~R!)&e}+5?ovX{WL7hCwW0HGJIL2g4Gz_2io9S>T@T;8 z>P~5$!i4)oz0+2bOr(2)o1D7AMxWybXHATkIZ1DY*E7(cj0f3?x7H0dP1lNS<`&;v zHn6Xkig~8Xi+d?Ix3NAFG}Sj&`vd*yOnRVypg-lbFH>>ayBqxOAY1=YIOk5ZYj=f=FCZE|-71<>Ol+@zlgo|-)M9~YLVLI3~& diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.po b/sphinx/locale/et/LC_MESSAGES/sphinx.po index a687f2972..10d93f9fa 100644 --- a/sphinx/locale/et/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/et/LC_MESSAGES/sphinx.po @@ -1,15 +1,20 @@ # Estonian translations for Sphinx. -# Copyright (C) 2010 ORGANIZATION -# This file is distributed under the same license as the Sphinx project. -# FIRST AUTHOR , 2010. +# Sphinxi eesti keele tõlge. # +# Copyright (C) 2011‒2012 Pocoo Team. +# +# This file is distributed under the same license as the Sphinx project. +# +# Aivar Annamaa , 2011 +# Ivar Smolin , 2012 + msgid "" msgstr "" -"Project-Id-Version: Sphinx 1.0pre/8b971dbc7d36\n" +"Project-Id-Version: Sphinx 1.1.3" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2011-09-21 10:06+0200\n" -"PO-Revision-Date: 2011-09-18 11:40+0200\n" -"Last-Translator: Aivar Annamaa \n" +"PO-Revision-Date: 2012-09-15 12:56+0300\n" +"Last-Translator: Ivar Smolin \n" "Language-Team: \n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" @@ -18,7 +23,7 @@ msgstr "" "Generated-By: Babel 0.9.6\n" #: sphinx/config.py:81 -#, fuzzy, python-format +#, python-format msgid "%s %s documentation" msgstr "%s %s dokumentatsioon" @@ -26,22 +31,22 @@ msgstr "%s %s dokumentatsioon" #: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" -msgstr "%B %d, %Y" +msgstr "%d. %B %Y" #: sphinx/environment.py:1625 #, python-format msgid "see %s" -msgstr "" +msgstr "vaata %s" #: sphinx/environment.py:1628 #, python-format msgid "see also %s" -msgstr "" +msgstr "vaata ka %s" #: sphinx/roles.py:175 -#, fuzzy, python-format +#, python-format msgid "Python Enhancement Proposals; PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgstr "Pythoni täiustusettepanekud, PEP %s" #: sphinx/builders/changes.py:73 msgid "Builtins" @@ -54,7 +59,7 @@ msgstr "Mooduli tase" #: sphinx/builders/html.py:274 #, python-format msgid "%b %d, %Y" -msgstr "%b %d, %Y" +msgstr "%d. %b %Y" #: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" @@ -73,8 +78,11 @@ msgid "previous" msgstr "eelmine" #: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 +# paistab olevat ristviitamiseks. ei oska öelda, kas siia sobiks paremini +# 'Sektsioonis' või 'Teema' või midagi muud. sestap panin enamvähem lollikindla +# 'Pealkirjas'. (okul) msgid " (in " -msgstr " (in " +msgstr " (pealkirjas " #: sphinx/directives/other.py:136 msgid "Section author: " @@ -196,9 +204,9 @@ msgid "%s() (%s method)" msgstr "%s() (%s meetod)" #: sphinx/domains/javascript.py:109 -#, fuzzy, python-format +#, python-format msgid "%s() (class)" -msgstr "%s (C++ klass)" +msgstr "%s() (klass)" #: sphinx/domains/javascript.py:111 #, python-format @@ -216,7 +224,7 @@ msgstr "Argumendid" #: sphinx/domains/javascript.py:125 msgid "Throws" -msgstr "Throws" +msgstr "" #: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" @@ -232,7 +240,7 @@ msgstr "Muutujad" #: sphinx/domains/python.py:104 msgid "Raises" -msgstr "Raises" +msgstr "" #: sphinx/domains/python.py:255 sphinx/domains/python.py:312 #: sphinx/domains/python.py:324 sphinx/domains/python.py:337 @@ -278,12 +286,12 @@ msgstr "%s() (%s staatiline meetod)" #: sphinx/domains/python.py:341 #, python-format msgid "%s() (%s.%s class method)" -msgstr "%s() (%s.%s klassi meetod)" +msgstr "%s() (klassi %s.%s meetod)" #: sphinx/domains/python.py:344 #, python-format msgid "%s() (%s class method)" -msgstr "%s() (%s klassi meetod)" +msgstr "%s() (klassi %s meetod)" #: sphinx/domains/python.py:354 #, python-format @@ -305,7 +313,7 @@ msgstr "moodulid" #: sphinx/domains/python.py:537 msgid "Deprecated" -msgstr "Ebaasoovitav" +msgstr "Iganenud" #: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" @@ -328,9 +336,8 @@ msgid "module" msgstr "moodul" #: sphinx/domains/python.py:695 -#, fuzzy msgid " (deprecated)" -msgstr "Ebaasoovitav" +msgstr " (iganenud)" #: sphinx/domains/rst.py:55 #, python-format @@ -362,11 +369,11 @@ msgstr "%s käsurea valik; %s" #: sphinx/domains/std.py:393 msgid "glossary term" -msgstr "termin" +msgstr "sõnastiku termin" #: sphinx/domains/std.py:394 msgid "grammar token" -msgstr "grammatika märgend" +msgstr "grammatika märk" #: sphinx/domains/std.py:395 msgid "reference label" @@ -378,7 +385,7 @@ msgstr "keskkonnamuutuja" #: sphinx/domains/std.py:397 msgid "program option" -msgstr "programmi seade" +msgstr "programmi valik" #: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: sphinx/themes/basic/genindex-split.html:11 @@ -395,26 +402,26 @@ msgstr "Mooduli indeks" #: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" -msgstr "Otsingu lehekülg" +msgstr "Otsinguleht" #: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" -msgstr " Baasid: %s" +msgstr " Pärineb: %s" #: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" -msgstr "sünonüüm :class:`%s`" +msgstr "klassi :class:`%s` sünonüüm" #: sphinx/ext/todo.py:41 msgid "Todo" -msgstr "Tegemata" +msgstr "Teha" #: sphinx/ext/todo.py:109 #, python-format msgid "(The <> is located in %s, line %d.)" -msgstr "(Algne kirje asub failis %s, real %d.)" +msgstr "(<> asub failis %s real %d.)" #: sphinx/ext/todo.py:117 msgid "original entry" @@ -498,7 +505,7 @@ msgstr "Muudetud versioonis %s" #: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" -msgstr "Ebasoovitav alates versioonist %s" +msgstr "Iganenud alates versioonist %s" #: sphinx/locale/__init__.py:176 msgid "keyword" @@ -536,7 +543,7 @@ msgstr "Otsi" #: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20 msgid "Enter search terms or a module, class or function name." -msgstr "Sisesta otsingusõna" +msgstr "Sisesta otsingusõna või mooduli/klassi/funktsiooni nimi." #: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 msgid "Show Source" @@ -609,17 +616,17 @@ msgstr "Info selle dokumentatsiooni kohta" #: sphinx/themes/basic/layout.html:140 msgid "Copyright" -msgstr "Copyright" +msgstr "Autoriõigused" #: sphinx/themes/basic/layout.html:189 #, python-format msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgstr "© Autoriõigused %(copyright)s." #: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." -msgstr "© Copyright %(copyright)s." +msgstr "© Autoriõigused %(copyright)s." #: sphinx/themes/basic/layout.html:195 #, python-format @@ -632,7 +639,7 @@ msgid "" "Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Loodud Sphinx-iga (versioon: " +"Loodud Sphinxiga (versioon: " "%(sphinx_version)s)." #: sphinx/themes/basic/opensearch.xml:4 @@ -669,9 +676,9 @@ msgid "" " function will automatically search for all of the words. Pages\n" " containing fewer words won't appear in the result list." msgstr "" -"Siin saad otsida käesolevast dokumentatsioonist. Sisesta otsisõned " +"Siin saad otsida käesolevast dokumentatsioonist. Sisesta otsisõnad " "allolevasse lahtrisse ning klõpsa \"Otsi\". Tulemuseks antakse " -"leheküljed, mis sisaldavad kõiki otsisõnesid." +"leheküljed, mis sisaldavad kõiki otsisõnasid." #: sphinx/themes/basic/search.html:36 msgid "search" @@ -683,7 +690,7 @@ msgstr "Otsingutulemused" #: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." -msgstr "Otsing ei andnud tulemusi" +msgstr "Otsing ei andnud tulemusi." #: sphinx/themes/basic/searchbox.html:12 msgid "Quick search" @@ -691,13 +698,13 @@ msgstr "Kiirotsing" #: sphinx/themes/basic/sourcelink.html:11 msgid "This Page" -msgstr "Käesolev lehekülg" +msgstr "Käesolev leht" #: sphinx/themes/basic/changes/frameset.html:5 #: sphinx/themes/basic/changes/versionchanges.html:12 #, python-format msgid "Changes in Version %(version)s — %(docstitle)s" -msgstr "Muudatused versioonis %(version)s — %(docstitle)s" +msgstr "Muutused versioonis %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format @@ -707,28 +714,28 @@ msgstr "%(filename)s — %(docstitle)s" #: sphinx/themes/basic/changes/versionchanges.html:17 #, python-format msgid "Automatically generated list of changes in version %(version)s" -msgstr "Automaatselt genereeritud nimekiri versiooni %(version)s muudatustest" +msgstr "Automaatselt genereeritud nimekiri versiooni %(version)s muutustest" #: sphinx/themes/basic/changes/versionchanges.html:18 msgid "Library changes" -msgstr "Teegi muudatused" +msgstr "Teegi muutused" #: sphinx/themes/basic/changes/versionchanges.html:23 msgid "C API changes" -msgstr "C API muudatused" +msgstr "C API muutused" #: sphinx/themes/basic/changes/versionchanges.html:25 msgid "Other changes" -msgstr "Ülejäänud muudatused" +msgstr "Ülejäänud muutused" #: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504 #: sphinx/writers/html.py:510 msgid "Permalink to this headline" -msgstr "Püsilink sellele pealkirjale" +msgstr "Püsiviit sellele pealkirjale" #: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92 msgid "Permalink to this definition" -msgstr "Püsilink sellele definitsioonile" +msgstr "Püsiviit sellele definitsioonile" #: sphinx/themes/basic/static/doctools.js:189 msgid "Hide Search Matches" diff --git a/sphinx/locale/hu/LC_MESSAGES/sphinx.mo b/sphinx/locale/hu/LC_MESSAGES/sphinx.mo index c0a8065943a42d7dbb0ab86e363179a798e16800..64f41560078a38df44af483d53e05063032f0ef9 100644 GIT binary patch delta 17 YcmZp3Xmi-GLWsrE%D`yz8lfm&05^gKr~m)} delta 17 YcmZp3Xmi-GLWsq}%FuH28lfm&05_@yuK)l5 diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo index ccda68f2547ea0434556d43b734fc5492388d99b..7410fae9a4a18f67b027ae0512cd772dc9937c2f 100644 GIT binary patch delta 17 YcmbOmHaBd;Wl Date: Sun, 28 Oct 2012 19:06:48 +0100 Subject: [PATCH 053/250] Closes #1010: Make pngmath images transparent by default; IE7+ should handle it. --- CHANGES | 2 ++ doc/ext/math.rst | 17 +++++------------ sphinx/ext/pngmath.py | 3 ++- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/CHANGES b/CHANGES index 6152c6558..f82b9d250 100644 --- a/CHANGES +++ b/CHANGES @@ -34,6 +34,8 @@ Release 1.2 (in development) * #1012: Update Estonian translation. +* #1010: Make pngmath images transparent by default; IE7+ should handle it. + Release 1.1.3 (Mar 10, 2012) ============================ diff --git a/doc/ext/math.rst b/doc/ext/math.rst index 3652b55e8..91376d15d 100644 --- a/doc/ext/math.rst +++ b/doc/ext/math.rst @@ -148,19 +148,12 @@ built: .. confval:: pngmath_dvipng_args Additional arguments to give to dvipng, as a list. The default value is - ``['-gamma 1.5', '-D 110']`` which makes the image a bit darker and larger - then it is by default. + ``['-gamma', '1.5', '-D', '110', '-bg', 'Transparent']`` which makes the + image a bit darker and larger then it is by default, and produces PNGs with a + transparent background. - An arguments you might want to add here is e.g. ``'-bg Transparent'``, - which produces PNGs with a transparent background. This is not enabled by - default because some Internet Explorer versions don't like transparent PNGs. - - .. note:: - - When you "add" an argument, you need to reproduce the default arguments if - you want to keep them; that is, like this:: - - pngmath_dvipng_args = ['-gamma 1.5', '-D 110', '-bg Transparent'] + .. versionchanged:: 1.2 + Now includes ``-bg Transparent`` by default. .. confval:: pngmath_use_preview diff --git a/sphinx/ext/pngmath.py b/sphinx/ext/pngmath.py index 78c331a60..549dfb83a 100644 --- a/sphinx/ext/pngmath.py +++ b/sphinx/ext/pngmath.py @@ -237,7 +237,8 @@ def setup(app): app.add_config_value('pngmath_latex', 'latex', 'html') app.add_config_value('pngmath_use_preview', False, 'html') app.add_config_value('pngmath_dvipng_args', - ['-gamma 1.5', '-D 110'], 'html') + ['-gamma', '1.5', '-D', '110', '-bg', 'Transparent'], + 'html') app.add_config_value('pngmath_latex_args', [], 'html') app.add_config_value('pngmath_latex_preamble', '', 'html') app.add_config_value('pngmath_add_tooltips', True, 'html') From bee7f8bc39cae4b8d649c0a8b90d3f38ce485bc4 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Mon, 29 Oct 2012 13:07:21 +0900 Subject: [PATCH 054/250] fix test_linkcode str/bytes incompatibility at py3 --- tests/test_linkcode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_linkcode.py b/tests/test_linkcode.py index b4b333328..365e826f5 100644 --- a/tests/test_linkcode.py +++ b/tests/test_linkcode.py @@ -16,7 +16,7 @@ from util import * def test_html(app): app.builder.build_all() - fp = open(os.path.join(app.outdir, 'objects.html'), 'rb') + fp = open(os.path.join(app.outdir, 'objects.html'), 'r') try: stuff = fp.read() finally: From 718993afc8e0e61c689a7681aa27f0f6dfbbcb7e Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Mon, 29 Oct 2012 21:00:34 +0900 Subject: [PATCH 055/250] fix #440 #1008 : coarse timestamp resolution in some filesystem generate wrong outdated file-list --- sphinx/environment.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index 04d0e6a7f..8f253084b 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -787,7 +787,12 @@ class BuildEnvironment: app.emit('doctree-read', doctree) # store time of build, for outdated files detection - self.all_docs[docname] = time.time() + # note:: + # Some filesystem's have coarse timestamp resolution. + # Therefore time.time() is older than filesystem's timestamp. + # ex. FAT32 have 2sec resolution. + self.all_docs[docname] = max( + time.time(), path.getmtime(self.doc2path(docname))) if self.versioning_condition: # get old doctree From 2d238baa57349971730f8be574ec4064e87bb670 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Mon, 29 Oct 2012 21:38:48 +0900 Subject: [PATCH 056/250] fix: Pygment-1.5 can't work with Python-2.4 --- tox.ini | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tox.ini b/tox.ini index ef61bdef2..63cf87d13 100644 --- a/tox.ini +++ b/tox.ini @@ -11,9 +11,12 @@ commands= sphinx-build -W -b html -d {envtmpdir}/doctrees doc {envtmpdir}/html [testenv:py24] +; simplejson 2.1.0 is last version that have compatibility to Python2.4. +; Pygments 1.5 have incompatibility to Python2.4 deps= nose simplejson==2.1.0 + Pygments==1.4 [testenv:py25] deps= From c1145e65bac0c5fe912baea62f02ae4fbba67405 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Tue, 30 Oct 2012 10:04:18 +0900 Subject: [PATCH 057/250] fix #1008: can't get correct source code filename because all modules have '__loader__' attribute at Python-3.3. --- sphinx/util/__init__.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sphinx/util/__init__.py b/sphinx/util/__init__.py index 6cb83aec2..7dce70126 100644 --- a/sphinx/util/__init__.py +++ b/sphinx/util/__init__.py @@ -197,14 +197,14 @@ def get_module_source(modname): except Exception, err: raise PycodeError('error importing %r' % modname, err) mod = sys.modules[modname] - if hasattr(mod, '__loader__'): - try: - source = mod.__loader__.get_source(modname) - except Exception, err: - raise PycodeError('error getting source for %r' % modname, err) - return 'string', source filename = getattr(mod, '__file__', None) if filename is None: + if hasattr(mod, '__loader__'): + try: + source = mod.__loader__.get_source(modname) + except Exception, err: + raise PycodeError('error getting source for %r' % modname, err) + return 'string', source raise PycodeError('no source found for module %r' % modname) filename = path.normpath(path.abspath(filename)) lfilename = filename.lower() From d856e89a79768f572e627ca927d14ff51f6892cb Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Tue, 30 Oct 2012 12:44:53 +0900 Subject: [PATCH 058/250] fix #1008 #1029 : intersphinx_mapping values are not stable if mapping have plural key/value set --- sphinx/ext/intersphinx.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index 9551e3cd1..b6eb275b2 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -191,9 +191,10 @@ def load_mappings(app): for name, _, invdata in cache.itervalues(): if name: env.intersphinx_named_inventory[name] = invdata - for type, objects in invdata.iteritems(): - env.intersphinx_inventory.setdefault( - type, {}).update(objects) + else: + for type, objects in invdata.iteritems(): + env.intersphinx_inventory.setdefault( + type, {}).update(objects) def missing_reference(app, env, node, contnode): From d769d4ae71ce8b8c98c7b77f7a8e7cf4a9666f4d Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 08:47:20 +0100 Subject: [PATCH 059/250] Change sphinx-dev to sphinx-users where applicable. --- EXAMPLES | 2 +- doc/_templates/indexsidebar.html | 4 ++-- sphinx/cmdline.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/EXAMPLES b/EXAMPLES index bb5712d49..9b4af650a 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -4,7 +4,7 @@ Projects using Sphinx This is an (incomplete) alphabetic list of projects that use Sphinx or are experimenting with using it for their documentation. If you like to be included, please mail to `the Google group -`_. +`_. I've grouped the list into sections to make it easier to find interesting examples. diff --git a/doc/_templates/indexsidebar.html b/doc/_templates/indexsidebar.html index feafd9046..a8129f019 100644 --- a/doc/_templates/indexsidebar.html +++ b/doc/_templates/indexsidebar.html @@ -20,8 +20,8 @@ are also available.

Questions? Suggestions?

-

Join the Google group:

-
Join the Google group:

+ diff --git a/sphinx/cmdline.py b/sphinx/cmdline.py index 9fc213716..eff89b944 100644 --- a/sphinx/cmdline.py +++ b/sphinx/cmdline.py @@ -223,7 +223,7 @@ def main(argv): 'can be provided next time.') print >>error, ( 'Either send bugs to the mailing list at ' - ',\n' + ',\n' 'or report them in the tracker at ' '. Thanks!') return 1 From ede91a36d0d5f03807477985b52a4decf3f92202 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 08:53:41 +0100 Subject: [PATCH 060/250] Add or-tools. --- EXAMPLES | 1 + 1 file changed, 1 insertion(+) diff --git a/EXAMPLES b/EXAMPLES index 9b4af650a..039a1f8f9 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -70,6 +70,7 @@ Documentation using a customized version of the default theme * Chaco: http://code.enthought.com/projects/chaco/docs/html/ * Djagios: http://djagios.org/ * GetFEM++: http://home.gna.org/getfem/ +* Google or-tools: https://or-tools.googlecode.com/svn/trunk/documentation/user_manual/index.html * GPAW: https://wiki.fysik.dtu.dk/gpaw/ * Grok: http://grok.zope.org/doc/current/ * IFM: http://fluffybunny.memebot.com/ifm-docs/index.html From 2671d5543681871f11bbf7b6223e142850810dd7 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 09:55:44 +0100 Subject: [PATCH 061/250] Update required Python to 2.5. --- setup.py | 20 ++------------------ tox.ini | 12 ++++++------ 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/setup.py b/setup.py index ca41aa431..720dc77b9 100644 --- a/setup.py +++ b/setup.py @@ -46,25 +46,9 @@ A development egg can be found `here requires = ['Pygments>=1.2', 'Jinja2>=2.3', 'docutils>=0.7'] -if sys.version_info < (2, 4): - print('ERROR: Sphinx requires at least Python 2.4 to run.') - sys.exit(1) - if sys.version_info < (2, 5): - # Python 2.4's distutils doesn't automatically install an egg-info, - # so an existing docutils install won't be detected -- in that case, - # remove the dependency from setup.py - try: - import docutils - if int(docutils.__version__[2]) < 4: - raise ValueError('docutils not recent enough') - except: - pass - else: - del requires[-1] - - # The uuid module is new in the stdlib in 2.5 - requires.append('uuid>=1.30') + print('ERROR: Sphinx requires at least Python 2.5 to run.') + sys.exit(1) # Provide a "compile_catalog" command that also creates the translated diff --git a/tox.ini b/tox.ini index ef61bdef2..bfb50e398 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist=py24,py25,py26,py27,py31,py32,pypy,du08,du07,du06,du05 +envlist=py25,py26,py27,py31,py32,pypy,du09,du08,du07 [testenv] deps= @@ -10,11 +10,6 @@ commands= {envpython} tests/run.py {posargs} sphinx-build -W -b html -d {envtmpdir}/doctrees doc {envtmpdir}/html -[testenv:py24] -deps= - nose - simplejson==2.1.0 - [testenv:py25] deps= nose @@ -44,3 +39,8 @@ deps= deps= nose docutils==0.8.1 + +[testenv:du09] +deps= + nose + docutils==0.9.1 From cac6b441692372bdb51f7676f835f6df4e2f0706 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:11:05 +0100 Subject: [PATCH 062/250] Add MathJax. --- EXAMPLES | 1 + 1 file changed, 1 insertion(+) diff --git a/EXAMPLES b/EXAMPLES index 039a1f8f9..1dbdf20b0 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -144,6 +144,7 @@ Documentation using a custom theme/integrated in a site * Gameduino: http://excamera.com/sphinx/gameduino/ * GeoServer: http://docs.geoserver.org/ * Glashammer: http://glashammer.org/ +* MathJax: http://docs.mathjax.org/en/latest/ * MirrorBrain: http://mirrorbrain.org/docs/ * nose: http://somethingaboutorange.com/mrl/projects/nose/ * ObjectListView: http://objectlistview.sourceforge.net/python From 9a2760fcb1d5263a82992e3bf05857e3dca96e13 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:18:11 +0100 Subject: [PATCH 063/250] Add DEAP. --- EXAMPLES | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EXAMPLES b/EXAMPLES index 1dbdf20b0..d80bb592d 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -136,7 +136,8 @@ Documentation using a custom theme/integrated in a site * Blender: http://www.blender.org/documentation/250PythonDoc/ * Blinker: http://discorporate.us/projects/Blinker/docs/ -* Classy: classy: http://classy.pocoo.org/ +* Classy: http://classy.pocoo.org/ +* DEAP: http://deap.gel.ulaval.ca/doc/0.8/index.html * Django: http://docs.djangoproject.com/ * e-cidadania: http://e-cidadania.readthedocs.org/en/latest/ * Flask: http://flask.pocoo.org/docs/ From 1d4c1c11f5da65a7d1d17f890839100f07a42874 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:19:41 +0100 Subject: [PATCH 064/250] Add PSI4. --- EXAMPLES | 1 + 1 file changed, 1 insertion(+) diff --git a/EXAMPLES b/EXAMPLES index d80bb592d..3c46d77cf 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -153,6 +153,7 @@ Documentation using a custom theme/integrated in a site * OpenLayers: http://docs.openlayers.org/ * PyEphem: http://rhodesmill.org/pyephem/ * German Plone 4.0 user manual: http://www.hasecke.com/plone-benutzerhandbuch/4.0/ +* PSI4: http://sirius.chem.vt.edu/psi4manual/latest/index.html * Pylons: http://pylonshq.com/docs/en/0.9.7/ * PyMOTW: http://www.doughellmann.com/PyMOTW/ * pypol: http://pypol.altervista.org/ (celery) From b40a5a0c0e17ebd4444b520c6306806f85737a16 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:20:10 +0100 Subject: [PATCH 065/250] Add Turbulenz. --- EXAMPLES | 1 + 1 file changed, 1 insertion(+) diff --git a/EXAMPLES b/EXAMPLES index 3c46d77cf..555559b52 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -110,6 +110,7 @@ Documentation using the sphinxdoc theme * Sqlkit: http://sqlkit.argolinux.org/ * Tau: http://www.tango-controls.org/static/tau/latest/doc/html/index.html * Total Open Station: http://tops.berlios.de/ +* Turbulenz: http://docs.turbulenz.com/ * WebFaction: http://docs.webfaction.com/ From 6f824a533d6962180a453ac52f77f95c074114c6 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:20:59 +0100 Subject: [PATCH 066/250] Add Valence. --- EXAMPLES | 1 + 1 file changed, 1 insertion(+) diff --git a/EXAMPLES b/EXAMPLES index 555559b52..f946fd502 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -130,6 +130,7 @@ Documentation using another builtin theme (agogo) * Sylli: http://sylli.sourceforge.net/ (nature) * libLAS: http://liblas.org/ (nature) +* Valence: http://docs.valence.desire2learn.com/ (haiku) Documentation using a custom theme/integrated in a site From 447ba07b3c78285d9339f3b533d42a2914e0ed6f Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:21:53 +0100 Subject: [PATCH 067/250] Add Istihza. --- EXAMPLES | 1 + 1 file changed, 1 insertion(+) diff --git a/EXAMPLES b/EXAMPLES index f946fd502..d012b986c 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -147,6 +147,7 @@ Documentation using a custom theme/integrated in a site * Gameduino: http://excamera.com/sphinx/gameduino/ * GeoServer: http://docs.geoserver.org/ * Glashammer: http://glashammer.org/ +* Istihza (Turkish Python documentation project): http://www.istihza.com/py2/icindekiler_python.html * MathJax: http://docs.mathjax.org/en/latest/ * MirrorBrain: http://mirrorbrain.org/docs/ * nose: http://somethingaboutorange.com/mrl/projects/nose/ From 4961799528d1eec183cf6b77e669c3009e50d78a Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:22:51 +0100 Subject: [PATCH 068/250] Remove obsolete tox environments. --- tox.ini | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tox.ini b/tox.ini index bfb50e398..d6769a2a0 100644 --- a/tox.ini +++ b/tox.ini @@ -20,16 +20,6 @@ deps= nose simplejson -[testenv:du05] -deps= - nose - docutils==0.5 - -[testenv:du06] -deps= - nose - docutils==0.6 - [testenv:du07] deps= nose From d13c0470afb6674c754817d23c5cc61a170a6989 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:24:57 +0100 Subject: [PATCH 069/250] Update requirements documentation. --- doc/intro.rst | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/doc/intro.rst b/doc/intro.rst index 5d76dd29c..4d052c818 100644 --- a/doc/intro.rst +++ b/doc/intro.rst @@ -50,19 +50,15 @@ See the :ref:`pertinent section in the FAQ list `. Prerequisites ------------- -Sphinx needs at least **Python 2.4** or **Python 3.1** to run, as well as the +Sphinx needs at least **Python 2.5** or **Python 3.1** to run, as well as the docutils_ and Jinja2_ libraries. Sphinx should work with docutils version 0.7 or some (not broken) SVN trunk snapshot. If you like to have source code highlighting support, you must also install the Pygments_ library. -If you use **Python 2.4** you also need uuid_. - .. _reStructuredText: http://docutils.sf.net/rst.html .. _docutils: http://docutils.sf.net/ .. _Jinja2: http://jinja.pocoo.org/ .. _Pygments: http://pygments.org/ -.. The given homepage is only a directory listing so I'm using the pypi site. -.. _uuid: http://pypi.python.org/pypi/uuid/ Usage From f4cfc4531931a845b093823d12a7eefe00b2dc45 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:46:32 +0100 Subject: [PATCH 070/250] Add a py33 environment. --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index d6769a2a0..d0ea6ed8d 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist=py25,py26,py27,py31,py32,pypy,du09,du08,du07 +envlist=py25,py26,py27,py31,py32,py33,pypy,du09,du08,du07 [testenv] deps= From c411b51fbbdaae201331123c5a449ea7f5f8b0c8 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 30 Oct 2012 10:48:48 +0100 Subject: [PATCH 071/250] Closes #998: fix manpage writer in expectation of docutils 0.10 API change --- sphinx/writers/manpage.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py index 81f2988b2..e074691e4 100644 --- a/sphinx/writers/manpage.py +++ b/sphinx/writers/manpage.py @@ -72,6 +72,11 @@ class ManualPageTranslator(BaseTranslator): # since self.append_header() is never called, need to do this here self.body.append(MACRO_DEF) + # Overwrite admonition label translations with our own + for label, translation in admonitionlabels.items(): + self.language.labels[label] = self.deunicode(translation) + + # overwritten -- added quotes around all .TH arguments def header(self): tmpl = (".TH \"%(title_upper)s\" \"%(manual_section)s\"" @@ -193,12 +198,6 @@ class ManualPageTranslator(BaseTranslator): def depart_seealso(self, node): self.depart_admonition(node) - # overwritten -- use our own label translations - def visit_admonition(self, node, name=None): - if name: - self.body.append('.IP %s\n' % - self.deunicode(admonitionlabels.get(name, name))) - def visit_productionlist(self, node): self.ensure_eol() names = [] From 88e1bbe307de1270bcd1257769918c267a8d6d09 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 31 Oct 2012 09:20:36 +0900 Subject: [PATCH 072/250] fix #1008: fix autodoc documenter resolve ordering. note: MethodDocumenter and FunctionDocumenter is same priority then Documenter.format_signature() choice documenter is not stable (depend on memory condition?). --- sphinx/ext/autodoc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index b0657dc9e..6985e04d6 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -1105,7 +1105,7 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): """ objtype = 'method' member_order = 50 - priority = 0 + priority = 1 @classmethod def can_document_member(cls, member, membername, isattr, parent): From ee0d0ed1fda132bb12dfea26805d4dda03202cb0 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 31 Oct 2012 10:21:16 +0900 Subject: [PATCH 073/250] adjust code-comment to suitable reST format --- sphinx/environment.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index 8f253084b..011c12c37 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -787,10 +787,12 @@ class BuildEnvironment: app.emit('doctree-read', doctree) # store time of build, for outdated files detection - # note:: - # Some filesystem's have coarse timestamp resolution. - # Therefore time.time() is older than filesystem's timestamp. - # ex. FAT32 have 2sec resolution. + # + # .. note:: + # + # Some filesystem's have coarse timestamp resolution. + # Therefore time.time() is older than filesystem's timestamp. + # ex. FAT32 have 2sec resolution. self.all_docs[docname] = max( time.time(), path.getmtime(self.doc2path(docname))) From 21d57d3125feb59a38432b08bb9ffea9d0b1855c Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 1 Nov 2012 17:38:22 +0100 Subject: [PATCH 074/250] Fix running tests under Python 3 without tox. --- tests/run.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/run.py b/tests/run.py index 8b3bf844d..4cd4a7660 100755 --- a/tests/run.py +++ b/tests/run.py @@ -18,14 +18,14 @@ if sys.version_info >= (3, 0): from distutils.util import copydir_run_2to3 testroot = path.dirname(__file__) or '.' if 'BUILD_TEST_PATH' in environ: - # for tox test. + # for tox testing newroot = environ['BUILD_TEST_PATH'] - # tox install sphinx package, not need sys.path.insert. + # tox installs the sphinx package, no need for sys.path.insert else: newroot = path.join(testroot, path.pardir, 'build') newroot = path.join(newroot, listdir(newroot)[0], 'tests') # always test the sphinx package from build/lib/ - sys.path.insert(0, path.join(newroot, path.pardir)) + sys.path.insert(0, path.abspath(path.join(newroot, path.pardir))) copydir_run_2to3(testroot, newroot) # switch to the converted dir so nose tests the right tests chdir(newroot) From 72962c99b716268a3f08d773f559891fde72227b Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 1 Nov 2012 17:52:41 +0100 Subject: [PATCH 075/250] Fix test_autodoc with Python 3.3, patches by Jon and Takayuki. --- sphinx/ext/autodoc.py | 2 +- sphinx/util/__init__.py | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index b0657dc9e..44c7ad8bb 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -1105,7 +1105,7 @@ class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): """ objtype = 'method' member_order = 50 - priority = 0 + priority = 1 # must be more than FunctionDocumenter @classmethod def can_document_member(cls, member, membername, isattr, parent): diff --git a/sphinx/util/__init__.py b/sphinx/util/__init__.py index 6cb83aec2..5d0c28119 100644 --- a/sphinx/util/__init__.py +++ b/sphinx/util/__init__.py @@ -197,13 +197,18 @@ def get_module_source(modname): except Exception, err: raise PycodeError('error importing %r' % modname, err) mod = sys.modules[modname] - if hasattr(mod, '__loader__'): + filename = getattr(mod, '__file__', None) + loader = getattr(mod, '__loader__', None) + if loader and getattr(loader, 'get_filename', None): try: - source = mod.__loader__.get_source(modname) + filename = loader.get_filename(modname) + except Exception, err: + raise PycodeError('error getting filename for %r' % filename, err) + if filename is None and loader: + try: + return 'string', loader.get_source(modname) except Exception, err: raise PycodeError('error getting source for %r' % modname, err) - return 'string', source - filename = getattr(mod, '__file__', None) if filename is None: raise PycodeError('no source found for module %r' % modname) filename = path.normpath(path.abspath(filename)) From 1f905f121ad7131678c5b0b571ecf10e189a9676 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 1 Nov 2012 17:58:47 +0100 Subject: [PATCH 076/250] Fix intersphinx dictionary ordering confusion differently, as proposed by Jon. --- sphinx/ext/intersphinx.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index b6eb275b2..d0c812b3b 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -188,13 +188,22 @@ def load_mappings(app): if update: env.intersphinx_inventory = {} env.intersphinx_named_inventory = {} - for name, _, invdata in cache.itervalues(): + # Duplicate values in different inventories will shadow each + # other; which one will override which can vary between builds + # since they are specified using an unordered dict. To make + # it more consistent, we sort the named inventories and then + # add the unnamed inventories last. This means that the + # unnamed inventories will shadow the named ones but the named + # ones can still be accessed when the name is specified. + cached_vals = list(cache.itervalues()) + named_vals = sorted(v for v in cached_vals if v[0]) + unnamed_vals = [v for v in cached_vals if not v[0]] + for name, _, invdata in named_vals + unnamed_vals: if name: env.intersphinx_named_inventory[name] = invdata - else: - for type, objects in invdata.iteritems(): - env.intersphinx_inventory.setdefault( - type, {}).update(objects) + for type, objects in invdata.iteritems(): + env.intersphinx_inventory.setdefault( + type, {}).update(objects) def missing_reference(app, env, node, contnode): From edebdbbb7b98dd97c2521add1aec721b660e265f Mon Sep 17 00:00:00 2001 From: Robert Lehmann Date: Fri, 2 Nov 2012 16:02:32 +0100 Subject: [PATCH 077/250] Update domains provided by sphinxcontrib. --- doc/domains.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/domains.rst b/doc/domains.rst index 3d52db3fd..2f26ac22b 100644 --- a/doc/domains.rst +++ b/doc/domains.rst @@ -812,7 +812,7 @@ More domains ------------ The sphinx-contrib_ repository contains more domains available as extensions; -currently Ada, Erlang, HTTP, PHP, and Ruby domains. +currently Ada, CoffeeScript, Erlang, HTTP, Jinja, PHP, Ruby, and Scala domains. .. _sphinx-contrib: https://bitbucket.org/birkenfeld/sphinx-contrib/ From 31536aafa2bf9c5af6a20f9bebc99145cb8390f8 Mon Sep 17 00:00:00 2001 From: Robert Lehmann Date: Fri, 2 Nov 2012 16:52:55 +0100 Subject: [PATCH 078/250] Link domains provided by sphinxcontrib. --- doc/domains.rst | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/doc/domains.rst b/doc/domains.rst index 2f26ac22b..bd99a4c5e 100644 --- a/doc/domains.rst +++ b/doc/domains.rst @@ -812,7 +812,15 @@ More domains ------------ The sphinx-contrib_ repository contains more domains available as extensions; -currently Ada, CoffeeScript, Erlang, HTTP, Jinja, PHP, Ruby, and Scala domains. +currently Ada, CoffeeScript_, Erlang_, HTTP_, Jinja_, PHP_, Ruby, and Scala_ +domains. .. _sphinx-contrib: https://bitbucket.org/birkenfeld/sphinx-contrib/ + +.. _CoffeeScript: http://pypi.python.org/pypi/sphinxcontrib-coffee +.. _Erlang: http://pypi.python.org/pypi/sphinxcontrib-erlangdomain +.. _HTTP: http://pypi.python.org/pypi/sphinxcontrib-httpdomain +.. _Jinja: http://pypi.python.org/pypi/sphinxcontrib-jinjadomain +.. _Scala: http://pypi.python.org/pypi/sphinxcontrib-scaladomain +.. _PHP: http://pypi.python.org/pypi/sphinxcontrib-phpdomain From bb51110b3e95b366092a5250caf8b7971b080d82 Mon Sep 17 00:00:00 2001 From: Robert Lehmann Date: Fri, 2 Nov 2012 17:27:02 +0100 Subject: [PATCH 079/250] Add OpenCV. --- EXAMPLES | 1 + 1 file changed, 1 insertion(+) diff --git a/EXAMPLES b/EXAMPLES index d012b986c..d1a64e7ca 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -153,6 +153,7 @@ Documentation using a custom theme/integrated in a site * nose: http://somethingaboutorange.com/mrl/projects/nose/ * ObjectListView: http://objectlistview.sourceforge.net/python * Open ERP: http://doc.openerp.com/ +* OpenCV: http://docs.opencv.org/ * OpenLayers: http://docs.openlayers.org/ * PyEphem: http://rhodesmill.org/pyephem/ * German Plone 4.0 user manual: http://www.hasecke.com/plone-benutzerhandbuch/4.0/ From c3d4887a368d44498f4978ecdaf2737fb1dbb92e Mon Sep 17 00:00:00 2001 From: Robert Lehmann Date: Sat, 3 Nov 2012 10:50:50 +0100 Subject: [PATCH 080/250] Configure Travis CI. --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..54e27e201 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,7 @@ +language: python +python: + - "2.7" + - "3.3" +script: make test +install: + - python setup.py -q install From 2dc47649a21071af9fbaccacaa28edfdcbdac52f Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sat, 3 Nov 2012 07:35:20 -0500 Subject: [PATCH 081/250] Update distribute_setup.py to version 0.6.30 (http://python-distribute.org/distribute_setup.py) --- distribute_setup.py | 98 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 77 insertions(+), 21 deletions(-) diff --git a/distribute_setup.py b/distribute_setup.py index 37117b34e..cebd80b19 100644 --- a/distribute_setup.py +++ b/distribute_setup.py @@ -14,11 +14,14 @@ the appropriate options to ``use_setuptools()``. This file can also be run as a script to install or upgrade setuptools. """ import os +import shutil import sys import time import fnmatch import tempfile import tarfile +import optparse + from distutils import log try: @@ -46,7 +49,7 @@ except ImportError: args = [quote(arg) for arg in args] return os.spawnl(os.P_WAIT, sys.executable, *args) == 0 -DEFAULT_VERSION = "0.6.13" +DEFAULT_VERSION = "0.6.30" DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/" SETUPTOOLS_FAKED_VERSION = "0.6c11" @@ -63,7 +66,7 @@ Description: xxx """ % SETUPTOOLS_FAKED_VERSION -def _install(tarball): +def _install(tarball, install_args=()): # extracting the tarball tmpdir = tempfile.mkdtemp() log.warn('Extracting in %s', tmpdir) @@ -81,11 +84,14 @@ def _install(tarball): # installing log.warn('Installing Distribute') - if not _python_cmd('setup.py', 'install'): + if not _python_cmd('setup.py', 'install', *install_args): log.warn('Something went wrong during the installation.') log.warn('See the error message above.') + # exitcode will be 2 + return 2 finally: os.chdir(old_wd) + shutil.rmtree(tmpdir) def _build_egg(egg, tarball, to_dir): @@ -110,6 +116,7 @@ def _build_egg(egg, tarball, to_dir): finally: os.chdir(old_wd) + shutil.rmtree(tmpdir) # returning the result log.warn(egg) if not os.path.exists(egg): @@ -144,7 +151,7 @@ def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, except ImportError: return _do_download(version, download_base, to_dir, download_delay) try: - pkg_resources.require("distribute>="+version) + pkg_resources.require("distribute>=" + version) return except pkg_resources.VersionConflict: e = sys.exc_info()[1] @@ -167,6 +174,7 @@ def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, if not no_fake: _create_fake_setuptools_pkg_info(to_dir) + def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, delay=15): """Download distribute from a specified location and return its filename @@ -203,6 +211,7 @@ def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, dst.close() return os.path.realpath(saveto) + def _no_sandbox(function): def __no_sandbox(*args, **kw): try: @@ -227,6 +236,7 @@ def _no_sandbox(function): return __no_sandbox + def _patch_file(path, content): """Will backup the file then patch it""" existing_content = open(path).read() @@ -245,15 +255,18 @@ def _patch_file(path, content): _patch_file = _no_sandbox(_patch_file) + def _same_content(path, content): return open(path).read() == content + def _rename_path(path): new_name = path + '.OLD.%s' % time.time() - log.warn('Renaming %s into %s', path, new_name) + log.warn('Renaming %s to %s', path, new_name) os.rename(path, new_name) return new_name + def _remove_flat_installation(placeholder): if not os.path.isdir(placeholder): log.warn('Unkown installation at %s', placeholder) @@ -267,7 +280,7 @@ def _remove_flat_installation(placeholder): log.warn('Could not locate setuptools*.egg-info') return - log.warn('Removing elements out of the way...') + log.warn('Moving elements out of the way...') pkg_info = os.path.join(placeholder, file) if os.path.isdir(pkg_info): patched = _patch_egg_dir(pkg_info) @@ -289,11 +302,13 @@ def _remove_flat_installation(placeholder): _remove_flat_installation = _no_sandbox(_remove_flat_installation) + def _after_install(dist): log.warn('After install bootstrap.') placeholder = dist.get_command_obj('install').install_purelib _create_fake_setuptools_pkg_info(placeholder) + def _create_fake_setuptools_pkg_info(placeholder): if not placeholder or not os.path.exists(placeholder): log.warn('Could not find the install location') @@ -307,7 +322,11 @@ def _create_fake_setuptools_pkg_info(placeholder): return log.warn('Creating %s', pkg_info) - f = open(pkg_info, 'w') + try: + f = open(pkg_info, 'w') + except EnvironmentError: + log.warn("Don't have permissions to write %s, skipping", pkg_info) + return try: f.write(SETUPTOOLS_PKG_INFO) finally: @@ -321,7 +340,10 @@ def _create_fake_setuptools_pkg_info(placeholder): finally: f.close() -_create_fake_setuptools_pkg_info = _no_sandbox(_create_fake_setuptools_pkg_info) +_create_fake_setuptools_pkg_info = _no_sandbox( + _create_fake_setuptools_pkg_info +) + def _patch_egg_dir(path): # let's check if it's already patched @@ -343,6 +365,7 @@ def _patch_egg_dir(path): _patch_egg_dir = _no_sandbox(_patch_egg_dir) + def _before_install(): log.warn('Before install bootstrap.') _fake_setuptools() @@ -351,7 +374,7 @@ def _before_install(): def _under_prefix(location): if 'install' not in sys.argv: return True - args = sys.argv[sys.argv.index('install')+1:] + args = sys.argv[sys.argv.index('install') + 1:] for index, arg in enumerate(args): for option in ('--root', '--prefix'): if arg.startswith('%s=' % option): @@ -359,7 +382,7 @@ def _under_prefix(location): return location.startswith(top_dir) elif arg == option: if len(args) > index: - top_dir = args[index+1] + top_dir = args[index + 1] return location.startswith(top_dir) if arg == '--user' and USER_SITE is not None: return location.startswith(USER_SITE) @@ -376,11 +399,14 @@ def _fake_setuptools(): return ws = pkg_resources.working_set try: - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools', - replacement=False)) + setuptools_dist = ws.find( + pkg_resources.Requirement.parse('setuptools', replacement=False) + ) except TypeError: # old distribute API - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools')) + setuptools_dist = ws.find( + pkg_resources.Requirement.parse('setuptools') + ) if setuptools_dist is None: log.warn('No setuptools distribution found') @@ -414,7 +440,7 @@ def _fake_setuptools(): res = _patch_egg_dir(setuptools_location) if not res: return - log.warn('Patched done.') + log.warn('Patching complete.') _relaunch() @@ -422,7 +448,9 @@ def _relaunch(): log.warn('Relaunching...') # we have to relaunch the process # pip marker to avoid a relaunch bug - if sys.argv[:3] == ['-c', 'install', '--single-version-externally-managed']: + _cmd1 = ['-c', 'install', '--single-version-externally-managed'] + _cmd2 = ['-c', 'install', '--record'] + if sys.argv[:3] == _cmd1 or sys.argv[:3] == _cmd2: sys.argv[0] = 'setup.py' args = [sys.executable] + sys.argv sys.exit(subprocess.call(args)) @@ -448,7 +476,7 @@ def _extractall(self, path=".", members=None): # Extract directories with a safe mode. directories.append(tarinfo) tarinfo = copy.copy(tarinfo) - tarinfo.mode = 448 # decimal for oct 0700 + tarinfo.mode = 448 # decimal for oct 0700 self.extract(tarinfo, path) # Reverse sort directories. @@ -475,11 +503,39 @@ def _extractall(self, path=".", members=None): self._dbg(1, "tarfile: %s" % e) -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - tarball = download_setuptools() - _install(tarball) +def _build_install_args(options): + """ + Build the arguments to 'python setup.py install' on the distribute package + """ + install_args = [] + if options.user_install: + if sys.version_info < (2, 6): + log.warn("--user requires Python 2.6 or later") + raise SystemExit(1) + install_args.append('--user') + return install_args +def _parse_args(): + """ + Parse the command line for options + """ + parser = optparse.OptionParser() + parser.add_option( + '--user', dest='user_install', action='store_true', default=False, + help='install in user site package (requires Python 2.6 or later)') + parser.add_option( + '--download-base', dest='download_base', metavar="URL", + default=DEFAULT_URL, + help='alternative URL from where to download the distribute package') + options, args = parser.parse_args() + # positional arguments are ignored + return options + +def main(version=DEFAULT_VERSION): + """Install or upgrade setuptools and EasyInstall""" + options = _parse_args() + tarball = download_setuptools(download_base=options.download_base) + return _install(tarball, _build_install_args(options)) if __name__ == '__main__': - main(sys.argv[1:]) + sys.exit(main()) From b057ef76efd52d8f83d63b3bf7787c5806cb86f3 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sat, 3 Nov 2012 09:37:35 -0500 Subject: [PATCH 082/250] Require Docutils 0.10 in tox py33 test env. --- tox.ini | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tox.ini b/tox.ini index d0ea6ed8d..cedda4f37 100644 --- a/tox.ini +++ b/tox.ini @@ -15,6 +15,12 @@ deps= nose simplejson==2.5.0 +[testenv:py33] +deps= + nose + #svn+http://docutils.svn.sourceforge.net/svnroot/docutils/trunk/docutils + docutils>=0.10.0 + [testenv:pypy] deps= nose From e1209ecd903c7e588008921920209f4cb414294f Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sat, 3 Nov 2012 09:52:39 -0500 Subject: [PATCH 083/250] sphinx-build: Require Docutils >= 0.10 when running under Python >= 3.3 --- sphinx/__init__.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sphinx/__init__.py b/sphinx/__init__.py index e1ffc2ed6..4538eb4cd 100644 --- a/sphinx/__init__.py +++ b/sphinx/__init__.py @@ -38,11 +38,20 @@ if '+' in __version__ or 'pre' in __version__: def main(argv=sys.argv): """Sphinx build "main" command-line entry.""" - if sys.version_info[:3] < (2, 4, 0): + if sys.version_info[:3] < (2, 5, 0): sys.stderr.write('Error: Sphinx requires at least ' - 'Python 2.4 to run.\n') + 'Python 2.5 to run.\n') return 1 - + if sys.version_info[:3] >= (3, 3, 0): + try: + import docutils + x, y = docutils.__version__.split('.')[:2] + if (int(x), int(y)) < (0, 10): + sys.stderr.write('Error: Sphinx requires at least ' + 'Docutils 0.10 for Python 3.3 and above.\n') + return 1 + except Exception: + pass try: from sphinx import cmdline except ImportError: From 55b28b01984b51c0f25d8f4d6272afbd6aa28527 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sat, 3 Nov 2012 11:04:32 -0500 Subject: [PATCH 084/250] Fix whitespace / line length issues reported by "make test" --- doc/ext/linkcode.rst | 10 +++++----- sphinx/builders/linkcheck.py | 3 ++- sphinx/ext/graphviz.py | 2 +- sphinx/quickstart.py | 2 +- sphinx/util/nodes.py | 6 +++--- sphinx/util/osutil.py | 2 +- sphinx/writers/latex.py | 8 +++++--- 7 files changed, 18 insertions(+), 15 deletions(-) diff --git a/doc/ext/linkcode.rst b/doc/ext/linkcode.rst index f05a46f92..a69a5b1c5 100644 --- a/doc/ext/linkcode.rst +++ b/doc/ext/linkcode.rst @@ -13,14 +13,14 @@ somewhere on the web. The intent is similar to the ``sphinx.ext.viewcode`` extension, but assumes the source code can be found somewhere on the Internet. -In your configuration, you need to specify a :confval:`linkcode_resolve` +In your configuration, you need to specify a :confval:`linkcode_resolve` function that returns an URL based on the object. .. confval:: linkcode_resolve This is a function ``linkcode_resolve(domain, info)``, which should return the URL to source code corresponding to - the object in given domain with given information. + the object in given domain with given information. The function should return ``None`` if no link is to be added. @@ -40,7 +40,7 @@ function that returns an URL based on the object. def linkcode_resolve(domain, info): if domain != 'py': return None - if not info['module']: - return None - filename = info['module'].replace('.', '/') + if not info['module']: + return None + filename = info['module'].replace('.', '/') return "http://somesite/sourcerepo/%s.py" % filename diff --git a/sphinx/builders/linkcheck.py b/sphinx/builders/linkcheck.py index a8adcdac7..bcf42741d 100644 --- a/sphinx/builders/linkcheck.py +++ b/sphinx/builders/linkcheck.py @@ -102,7 +102,8 @@ class CheckExternalLinksBuilder(Builder): def check(): # check for various conditions without bothering the network - if len(uri) == 0 or uri[0] == '#' or uri[0:7] == 'mailto:' or uri[0:4] == 'ftp:': + if len(uri) == 0 or uri[0] == '#' or \ + uri[0:7] == 'mailto:' or uri[0:4] == 'ftp:': return 'unchecked', '' elif not (uri[0:5] == 'http:' or uri[0:6] == 'https:'): return 'local', '' diff --git a/sphinx/ext/graphviz.py b/sphinx/ext/graphviz.py index 3cb289a96..593c76e34 100644 --- a/sphinx/ext/graphviz.py +++ b/sphinx/ext/graphviz.py @@ -125,7 +125,7 @@ def render_dot(self, code, options, format, prefix='graphviz'): str(self.builder.config.graphviz_dot) + \ str(self.builder.config.graphviz_dot_args) ).encode('utf-8') - + fname = '%s-%s.%s' % (prefix, sha(hashkey).hexdigest(), format) if hasattr(self.builder, 'imgpath'): # HTML diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index 3adccdecf..38daa36c8 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -401,7 +401,7 @@ help: \t@echo " epub to make an epub" \t@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" \t@echo " latexpdf to make LaTeX files and run them through pdflatex" -\t@echo " latexpdfja to make LaTeX files and run them through platex and dvipdfmx" +\t@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" \t@echo " text to make text files" \t@echo " man to make manual pages" \t@echo " texinfo to make Texinfo files" diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py index da7413f14..62796bece 100644 --- a/sphinx/util/nodes.py +++ b/sphinx/util/nodes.py @@ -44,14 +44,14 @@ def extract_messages(doctree): """Extract translatable messages from a document tree.""" for node in doctree.traverse(nodes.TextElement): # workaround: nodes.term doesn't have source, line and rawsource - # It should be fixed in Docutils. There is a patch for it in Docutils - # tracker: https://sourceforge.net/tracker/?func=detail&aid=3548418&group_id=38414&atid=422032 + # (fixed in Docutils r7495) if isinstance(node, nodes.term) and not node.source: definition_list_item = node.parent if definition_list_item.line is not None: node.source = definition_list_item.source node.line = definition_list_item.line - 1 - node.rawsource = definition_list_item.rawsource.split("\n", 2)[0] + node.rawsource = definition_list_item.\ + rawsource.split("\n", 2)[0] if not node.source: continue # built-in message if isinstance(node, IGNORED_NODES): diff --git a/sphinx/util/osutil.py b/sphinx/util/osutil.py index 64ce74234..8ecfe692b 100644 --- a/sphinx/util/osutil.py +++ b/sphinx/util/osutil.py @@ -51,7 +51,7 @@ def relative_uri(base, to): # returns '', not 'index.html' return '' if len(b2) == 1 and t2 == ['']: - # Special case: relative_uri('f/index.html','f/') should + # Special case: relative_uri('f/index.html','f/') should # return './', not '' return '.' + SEP return ('..' + SEP) * (len(b2)-1) + SEP.join(t2) diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index cc679c5e8..aadf44011 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -100,8 +100,9 @@ class LaTeXWriter(writers.Writer): class ExtBabel(Babel): def get_shorthandoff(self): shortlang = self.language.split('_')[0] - if shortlang in ('de', 'ngerman', 'sl', 'slovene', 'pt', 'portuges', 'es', 'spanish', - 'nl', 'dutch', 'pl', 'polish', 'it', 'italian'): + if shortlang in ('de', 'ngerman', 'sl', 'slovene', 'pt', 'portuges', + 'es', 'spanish', 'nl', 'dutch', 'pl', 'polish', 'it', + 'italian'): return '\\shorthandoff{"}' return '' @@ -217,7 +218,8 @@ class LaTeXTranslator(nodes.NodeVisitor): # allow the user to override them all self.elements.update(builder.config.latex_elements) if self.elements['extraclassoptions']: - self.elements['classoptions'] += ',' + self.elements['extraclassoptions'] + self.elements['classoptions'] += ',' + \ + self.elements['extraclassoptions'] self.highlighter = highlighting.PygmentsBridge('latex', builder.config.pygments_style, builder.config.trim_doctest_flags) From 0e44cb20a1dfe39f98402f3ab03f844067bd305d Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sat, 3 Nov 2012 11:11:38 -0500 Subject: [PATCH 085/250] setup.py: Require Docutils >= 0.10 when running under Python >= 3.3 --- setup.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/setup.py b/setup.py index 720dc77b9..43a072b24 100644 --- a/setup.py +++ b/setup.py @@ -50,6 +50,16 @@ if sys.version_info < (2, 5): print('ERROR: Sphinx requires at least Python 2.5 to run.') sys.exit(1) +if sys.version_info[:3] >= (3, 3, 0): + try: + import docutils + x, y = docutils.__version__.split('.')[:2] + if (int(x), int(y)) < (0, 10): + sys.stderr.write('ERROR: Sphinx requires at least ' + 'Docutils 0.10 for Python 3.3 and above.\n') + sys.exit(1) + except Exception: + pass # Provide a "compile_catalog" command that also creates the translated # JavaScript files if Babel is available. From e3ae24f8e4eeff2b8c5e8256508516fd2c48df87 Mon Sep 17 00:00:00 2001 From: anatoly techtonik Date: Sat, 3 Nov 2012 19:21:07 +0300 Subject: [PATCH 086/250] make.bat: improve error message if Sphinx is not found --- sphinx/quickstart.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index 3adccdecf..0bb3a192e 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -581,6 +581,20 @@ if "%%1" == "clean" ( \tgoto end ) + +%%SPHINXBUILD%% 2> nul +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure Sphinx is + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively + echo.you may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx.pocoo.org/ + exit /b 1 +) + if "%%1" == "html" ( \t%%SPHINXBUILD%% -b html %%ALLSPHINXOPTS%% %%BUILDDIR%%/html \tif errorlevel 1 exit /b 1 From 025ae137030c5f7ba18b8a8cd61ec744fad3af7a Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sat, 3 Nov 2012 12:29:55 -0500 Subject: [PATCH 087/250] setup.py: Update "requires" to docutils>=0.10.0 under Python 3.3 --- setup.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/setup.py b/setup.py index 43a072b24..cefb3b899 100644 --- a/setup.py +++ b/setup.py @@ -46,21 +46,13 @@ A development egg can be found `here requires = ['Pygments>=1.2', 'Jinja2>=2.3', 'docutils>=0.7'] +if sys.version_info[:3] >= (3, 3, 0): + requires[2] = 'docutils>=0.10' + if sys.version_info < (2, 5): print('ERROR: Sphinx requires at least Python 2.5 to run.') sys.exit(1) -if sys.version_info[:3] >= (3, 3, 0): - try: - import docutils - x, y = docutils.__version__.split('.')[:2] - if (int(x), int(y)) < (0, 10): - sys.stderr.write('ERROR: Sphinx requires at least ' - 'Docutils 0.10 for Python 3.3 and above.\n') - sys.exit(1) - except Exception: - pass - # Provide a "compile_catalog" command that also creates the translated # JavaScript files if Babel is available. From 9d412304cd7f9d82a041782b3c48078f188687b8 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sat, 3 Nov 2012 12:41:09 -0500 Subject: [PATCH 088/250] Remove trailing whitespace. --- sphinx/quickstart.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index 04b151ea2..2ae6423e8 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -582,7 +582,7 @@ if "%%1" == "clean" ( ) -%%SPHINXBUILD%% 2> nul +%%SPHINXBUILD%% 2> nul if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure Sphinx is From f9b1f7d2f2eeb9db4de03084ce315233e5863d78 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Sun, 4 Nov 2012 09:30:19 +0900 Subject: [PATCH 089/250] fix: ziptheme.zip block removing test temporary directory on Windows. --- tests/util.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/util.py b/tests/util.py index bd50bec05..32e94a7f0 100644 --- a/tests/util.py +++ b/tests/util.py @@ -21,6 +21,7 @@ except ImportError: wraps = lambda f: (lambda w: w) from sphinx import application +from sphinx.theming import Theme from sphinx.ext.autodoc import AutoDirective from path import path @@ -170,6 +171,7 @@ class TestApp(application.Sphinx): freshenv, warningiserror, tags) def cleanup(self, doctrees=False): + Theme.themes.clear() AutoDirective._registry.clear() for tree in self.cleanup_trees: shutil.rmtree(tree, True) From 4763419db1f964a2aa1dbf9ce214fde12710b08e Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 4 Nov 2012 11:28:12 +0100 Subject: [PATCH 090/250] Update Sphinx URL to new sphinx-doc.org domain. --- EXAMPLES | 2 +- README.rst | 2 +- doc/_templates/index.html | 4 ++-- doc/_templates/indexsidebar.html | 2 +- doc/conf.py | 4 ++-- setup.py | 2 +- sphinx/ext/oldcmarkup.py | 2 +- sphinx/locale/bn/LC_MESSAGES/sphinx.mo | Bin 12147 -> 12143 bytes sphinx/locale/bn/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/ca/LC_MESSAGES/sphinx.mo | Bin 9093 -> 9089 bytes sphinx/locale/ca/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/cs/LC_MESSAGES/sphinx.mo | Bin 8687 -> 8683 bytes sphinx/locale/cs/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/da/LC_MESSAGES/sphinx.mo | Bin 9357 -> 9353 bytes sphinx/locale/da/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/de/LC_MESSAGES/sphinx.mo | Bin 9672 -> 9668 bytes sphinx/locale/de/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/es/LC_MESSAGES/sphinx.mo | Bin 7603 -> 7599 bytes sphinx/locale/es/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/et/LC_MESSAGES/sphinx.mo | Bin 9429 -> 9425 bytes sphinx/locale/et/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/fa/LC_MESSAGES/sphinx.mo | Bin 8588 -> 8584 bytes sphinx/locale/fa/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/fi/LC_MESSAGES/sphinx.mo | Bin 8836 -> 8832 bytes sphinx/locale/fi/LC_MESSAGES/sphinx.po | 2 +- sphinx/locale/fr/LC_MESSAGES/sphinx.mo | Bin 9486 -> 9482 bytes sphinx/locale/fr/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/hr/LC_MESSAGES/sphinx.mo | Bin 8859 -> 8855 bytes sphinx/locale/hr/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/hu/LC_MESSAGES/sphinx.mo | Bin 8198 -> 8194 bytes sphinx/locale/hu/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/it/LC_MESSAGES/sphinx.mo | Bin 9100 -> 9096 bytes sphinx/locale/it/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/ja/LC_MESSAGES/sphinx.mo | Bin 10189 -> 10185 bytes sphinx/locale/ja/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/ko/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/lt/LC_MESSAGES/sphinx.mo | Bin 9845 -> 9841 bytes sphinx/locale/lt/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/lv/LC_MESSAGES/sphinx.mo | Bin 9651 -> 9647 bytes sphinx/locale/lv/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo | Bin 9145 -> 9141 bytes sphinx/locale/nb_NO/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/ne/LC_MESSAGES/sphinx.mo | Bin 12310 -> 12306 bytes sphinx/locale/ne/LC_MESSAGES/sphinx.po | 2 +- sphinx/locale/nl/LC_MESSAGES/sphinx.mo | Bin 9096 -> 9092 bytes sphinx/locale/nl/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/pl/LC_MESSAGES/sphinx.mo | Bin 9551 -> 9547 bytes sphinx/locale/pl/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo | Bin 9663 -> 9659 bytes sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/ru/LC_MESSAGES/sphinx.mo | Bin 11037 -> 11033 bytes sphinx/locale/ru/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/sk/LC_MESSAGES/sphinx.mo | Bin 8889 -> 8885 bytes sphinx/locale/sk/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/sl/LC_MESSAGES/sphinx.mo | Bin 8883 -> 8879 bytes sphinx/locale/sl/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/sphinx.pot | 2 +- sphinx/locale/sv/LC_MESSAGES/sphinx.mo | Bin 9153 -> 9149 bytes sphinx/locale/sv/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/tr/LC_MESSAGES/sphinx.mo | Bin 9718 -> 9714 bytes sphinx/locale/tr/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo | Bin 10486 -> 10482 bytes sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo | Bin 8592 -> 8588 bytes sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po | 4 ++-- sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo | Bin 8398 -> 8394 bytes sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po | 2 +- sphinx/quickstart.py | 2 +- sphinx/texinputs/sphinxhowto.cls | 2 +- sphinx/texinputs/sphinxmanual.cls | 2 +- sphinx/themes/basic/layout.html | 2 +- tests/test_build_html.py | 2 +- 72 files changed, 72 insertions(+), 72 deletions(-) diff --git a/EXAMPLES b/EXAMPLES index d1a64e7ca..575f35d84 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -106,7 +106,7 @@ Documentation using the sphinxdoc theme http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html * Reteisi: http://www.reteisi.org/contents.html * Satchmo: http://www.satchmoproject.com/docs/dev/ -* Sphinx: http://sphinx.pocoo.org/ +* Sphinx: http://sphinx-doc.org/ * Sqlkit: http://sqlkit.argolinux.org/ * Tau: http://www.tango-controls.org/static/tau/latest/doc/html/index.html * Total Open Station: http://tops.berlios.de/ diff --git a/README.rst b/README.rst index 850204d3c..5963a0ae8 100644 --- a/README.rst +++ b/README.rst @@ -21,7 +21,7 @@ After installing:: Then, direct your browser to ``_build/html/index.html``. -Or read them online at . +Or read them online at . Testing diff --git a/doc/_templates/index.html b/doc/_templates/index.html index 34dead7e6..8db89ab54 100644 --- a/doc/_templates/index.html +++ b/doc/_templates/index.html @@ -62,9 +62,9 @@

You can also download PDF versions of the Sphinx documentation: - a version generated from + a version generated from the LaTeX Sphinx produces, and - a version generated + a version generated by rst2pdf.

diff --git a/doc/_templates/indexsidebar.html b/doc/_templates/indexsidebar.html index a8129f019..c479abcb5 100644 --- a/doc/_templates/indexsidebar.html +++ b/doc/_templates/indexsidebar.html @@ -14,7 +14,7 @@

Get Sphinx from the Python Package Index, or install it with:

easy_install -U Sphinx
-

Latest development version docs +

Latest development version docs are also available.

{% endif %} diff --git a/doc/conf.py b/doc/conf.py index 6b547edde..834b36cfd 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -23,14 +23,14 @@ modindex_common_prefix = ['sphinx.'] html_static_path = ['_static'] html_sidebars = {'index': ['indexsidebar.html', 'searchbox.html']} html_additional_pages = {'index': 'index.html'} -html_use_opensearch = 'http://sphinx.pocoo.org' +html_use_opensearch = 'http://sphinx-doc.org' htmlhelp_basename = 'Sphinxdoc' epub_theme = 'epub' epub_basename = 'sphinx' epub_author = 'Georg Brandl' -epub_publisher = 'http://sphinx.pocoo.org/' +epub_publisher = 'http://sphinx-doc.org/' epub_scheme = 'url' epub_identifier = epub_publisher epub_pre_files = [('index.html', 'Welcome')] diff --git a/setup.py b/setup.py index cefb3b899..060e33a23 100644 --- a/setup.py +++ b/setup.py @@ -150,7 +150,7 @@ else: setup( name='Sphinx', version=sphinx.__version__, - url='http://sphinx.pocoo.org/', + url='http://sphinx-doc.org/', download_url='http://pypi.python.org/pypi/Sphinx', license='BSD', author='Georg Brandl', diff --git a/sphinx/ext/oldcmarkup.py b/sphinx/ext/oldcmarkup.py index 9dad85f45..a6eeee321 100644 --- a/sphinx/ext/oldcmarkup.py +++ b/sphinx/ext/oldcmarkup.py @@ -16,7 +16,7 @@ from sphinx.util.compat import Directive _warned_oldcmarkup = False WARNING_MSG = 'using old C markup; please migrate to new-style markup ' \ '(e.g. c:function instead of cfunction), see ' \ - 'http://sphinx.pocoo.org/domains.html' + 'http://sphinx-doc.org/domains.html' class OldCDirective(Directive): diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.mo b/sphinx/locale/bn/LC_MESSAGES/sphinx.mo index cb06ba98706c6abf5ab5d6c2c3d9403c7a02a681..b5da72d22e5b093b1d701d4d5b5623f5e88c673f 100644 GIT binary patch delta 2049 zcmXZcYfO(}7{~D|k|O!%l*3F{f0H5r)m-@07(HH?uj!^U|z%gXXXy&Do14 zF^5bxUZgRL$tlCMwV6}e9A5DK_1s(gfA0H!p69x*`+DxD=Frzrd2N`NYi92|nMGh) zj9CX9gMDxcX5eychewb>Bo9SlQW(P*#gw@fEhgFK+%F!utPo7bTdHlPaoh>`dmmG4i$ z^B)ZGRFH)}*c-=UCN4m2vILXxEUJJSRL5Rmdu+gt*y!dz-1R@$jrFiD{`DTHc!{VE zkMtN&jOCpoo=0k#`qvAFq1$*|H zK_Ux3Q5DA#O~#{kl#EK4iYg@CU7v(Xkb`RJTsIG)I$Ge?cc5Cm4|RshQ1L6U7y0cL z1MTD)s?r9$%c=hC=9f9zI>k3ph2BBk|IXQj+EFvI2m6hKu~Qt~#0+G~@=?$4Ms@Ne zb|t^vW{`|eP?ffzS{chvJPtvf))_bySKv4-LLJtJs1Cfx{`k$U$M*7H%`i-1eG00O zb(oGGdaCp)19I9M9ECqI6$cTWp)EpHycPA}0nEgEsDj#3^$1KuZD1uoW3dpmu}V~D zU*mpkLUm$Wkp63jB}8Y507Il>i&X$e#iFoqyJhcW?^R=von~@JV<$ia5YZEBGfyt!90A1I*iE!{QnE- zs5pyJJKls!dl5rD=EeZegCH!Xb0y}9jJ2ix44;kGjgM? z9^(IFT91*;x1$2@#qn5*>cCr6A^(s)SPI+J#^xZ$%0ifpyD?hde>H zQLWt z6LL`P7plc^!~J(P11B-xjtX3fdUX#_iR)3XC?U;HkW+CiYGZhKYW|irhhpNBD$-(J Nc5ahhT${t`mhOs4nb@N7S#k@_N|9l|M zyyn1NSm?}!MCVXcfE?_N3z2872m`ps%@4ZyX;k4?umj$9^Jl1pb*RGLVH7r^@-@YI z{(~KPDv^br*d4QQ0?tKkvJ69b0#!f_s$;d-2J5gbHn{l@cfAQau^!RUzupZMFNEsw zFpmMn*bG!U%Uvr!#df=aj*^;|J3;4bWjhu!*BRKnY+*4H>+q2e|m1$*|H zK_3==p(;)wnhc_L)DM+#FshK@?)rFCf*e#!XSw-OR7dmO`W95HccRWv1uFg}Od!8q zXP})tM^##fH#yax-TW*^Tc`LMs?eLL`|F(_Q9JsH?7{xx0F3QwHV8){OO}UvejBQj zhcTY~c7s7OK1Nmg8`a8qev)ty>a4$FwnnpNR&e2P;siX*CbIR~|#i+bnfs02q*oeAS2{ElqiW)f8Y zH}Y{J?!t0>gt~uqFTZ2Oz39IdN?9muX?7eZF%ME+f6T)%Sb}=z4{#>FL>g_%pa2^{UeP@oD3H)Z8m)pg?y~pGPe!;RjS90otHflZ@16 zLJtG_{_ik|X5k5DV;Co6 zkdIdtuS5kXcJsYRckL9a@JDX_J?1d~hXKst6Vh{YQHgU=_wPWOWM!J`P*l4MFHqm{ zC*+`76RO2M(*1We9mg^+LFWzt6cp@>NeWe_ PwXcnJ^U9c{+z$T%z@ybx diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.po b/sphinx/locale/bn/LC_MESSAGES/sphinx.po index 49549939d..69bd75e55 100644 --- a/sphinx/locale/bn/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.po @@ -639,10 +639,10 @@ msgstr "%(last_updated)s সর্বশেষ পরিবর্তন কর #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Sphinx %(sphinx_version)s দিয়ে " +"Sphinx %(sphinx_version)s দিয়ে " "তৈরী।" #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.mo b/sphinx/locale/ca/LC_MESSAGES/sphinx.mo index fc373e47ce7f0301fee0e0c105deb7854472bd21..bdcc3aa435c381edf0bff4c5e9902a0c6c564080 100644 GIT binary patch delta 2162 zcmXZdeP~xz7{Kvo_4B8jdv!UrZMvyjgHkIPIbjrQDWOtC{XndRXr&^U!_lJT`jVtz zv$7$r0?ELX$kFIk4T?p=q`=aDVnjx?KMLO~2&wOPJ1~BqbI!f@JkNQadv*7+9m@vK z6lE(TVpVxW9*_;i|Y zz#Q{!=<_=(BOBj%9}Cl2cs=<(y1|#&h-cAQ*RT|GRTJ|nbl!+2z7Y9~wlrUk1}vb7 zt;Q+10gcyPl}$XjhlM&84&bdgh#feBp16Ek#C)tr19qSldk80E0jFYDnr}?kyYUv* zpHJ8O(ESF`3LniFaH#kO&Fp;gXLQ3cB!{?$mMl+M3|xsf;|%nKwP+#@*o-YWo?u!p zp!;{B2|a`Ln7zorjR(*`@1cP|L3{o+dg9Y)h0dV?ub|KUjc!=P&rGaA*B7Ay+tAW? zBp*ii?LrdHVjY9IENn^__M@5iC*MvUMo)MQP2eLmu}{kpl|uhNW0@8+LB{w{UmylGig4G-uEYZpY^93F%4aBM%UZY z`f?<kz#6P6JP%WZD8p84 zLMycz`HM~bxZfU}jjy2x8?2@N4>I_I1vkp^iW_h$vJ};LFD^n`v>B~f54yoicoqB5 zO6=sv>xYmc#c}kx)9AszLn}0fK7T!9VBr7I66Q&dy`mm%#S*+7SD?M?P3wJVj}M_I z9YX&F97Y3wkG`a1=*#z4n*WO?R7@Y-FRNf+uba?b-G$r}kKq#Bif(iq=i{j~zkpWi zQt}_PHNHr$SE7Mtq6eFeCfbSyUW!yWi^mz*%U-lJuOtW12acd8{R|B-f>!J&^kf&% zfWM;wFCw|bb@aaJ{0Cz1>yk}q0t<1T-+w0qH&~Abcoyy9c67u2Xkz_n58p)tpG153 z722v1bmP&qeihyK23o;MeEeFCCf10h#E%vRw_z(9@QHN8+T_OM7Ied2^hDdyzt-0KSb(_}??J8eYHa63xtW3m9ho?%cR-EXx)rt zx=Kc(Z_FrtF=-?p zm))0A>Ml>I5Z}WR9L0tBF|NjocpX+$q{J}I!(v>FDKDkvcmu;*D^n`N4OoQ_;VgVS z=G(A=V-;>pdGr12Ao8nn?g6t=Vw07N7rvd1Gb^9 zUmre*?%RVToTbMYG_lYd7xtl<9|#YH@1PYPM-%t}P3)t%{v{gl9NOX^WBx1J;Xh;j z8ru4DUVsYXr&b1TxE2lEjT5D$Bt<~s# z>(D|w&;*~vV&bP=3~b2@=v)3Oa@=VIJ(A&@o=F#SE#=Ub?nTf10N#y<(ae8A6PQ4ctcZtcLaM-3 z*n)Oy6Y`gO`EkEJcq0y@g`HSP|LY!|x0D>#As z(N4U?kJpbNO-f_vb7#@QzC$~71$}-hV_@KX(z1mm$X=-tJ&HT=X1pIgyZ%_;kDl=n zw9=F4zkp}Zz~7@U=@s^R-Ek28GG=_`uvzT8- zJ2e^phaOEq!_0a$8mJB}tO-qY4H|eO(%~%iFz_t<(bnt>51|hnLn}Rn1~`v)Y#goZ zGMdOAXut_1mo$amSId7Oo_#~O3{7AqHv9eG!@v!;qXBa084jWw4x@>Upl5g#4SX6s z!!OXII*)FADc1i%_s!#@w}ZuD4Vu^zEG2%rg+U9hK?81%8@7hM;nV1b{b)slXyDgl z{cxSphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Creat amb Sphinx " +"Creat amb Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.mo b/sphinx/locale/cs/LC_MESSAGES/sphinx.mo index ba0798db6e18781081218359187b15015d105211..58037693dbb488f00f479360d5c55e5de57111f7 100644 GIT binary patch delta 2084 zcmXZdZ)nw37{Kwzd2MdFIk&X7X|AQy$)wuU5LC#`NG$`)us60)T&QFW`nO*EL|vue z7{;s!q)=ixYi$Fq2u&!7sK5r1A(0|X5nM*Ta#r8(-GR&foO6D^bI$WT=iF_y`C9Ym zUr)%Mh=@;1BJRLjSd0aw5!G0NldvB7!~=X4;R-twA|AsTG*?gMU2Me)d=U$9cj|Xy zj{f`T{KM$Fy;CEL=`=oLK)*#7_#N-V>&Pd{$|9y<4ccFr`peOP*WfhVkos-thV5uz zui|9vMEB`J=N&D}B4*O)XP^py#FaRLCb@uB=ipK_fK6znwqqf-IBwBl|mf3tcc*KAuq-TC!Sn;|83FO=yM>qk$~LI&8swfN8uP zUB3ejXb;Z9_t15-6ExT}zCkzs1wETT(2Osm6}o|LSjzc0u>xIi7T$x6X?!iZ;Rdwy zo02=wbvw|2cVR92$J^;a9~${U@{8nYbi!FQfS=L8hST#u(G5q?691L@|Dh$GOq7mS zqNSgY-k}!Ev41>G!;PQCN^C_l>_9Wvi*9@nuW;+%MFZHy)%W=U^tOM1WE6+dfX*a; zKr8(F~tM??i@f zv=?2t8x8mnddA1mjnCj5{4I^&Mk`#NQC}meLo-{9X7ng}_D`ah?0GcMo#-8S9er;f z=1ZHN_o4|5BA+yh=dXr0&_KGe0K=gkG|hXvXW(_-4GH zemi<64xttN7+t3iO=J*F;L!1+xw+iJEju^AbD^qk=yu8ZDf!;eg{q3e F{{d3rx-tL& delta 2088 zcmXZdduWzb9KiA4=G>gQOVcg4<+U|o>Qcz*2vU?b@q(e@BKt?>zAGe$F}1p7Xn$^XiQi|E?H5 zTac}bh@rBGV!VeFv8X(v9xHG>&P6`4kgrl)=AI)5U~m!b);!H2OU&3B*yyV1nn z#tFC&jdKuv??`19@hF4iEY#soxE!yeMb2Z_27C%lU<=x**RTY;@geL<^Zn`hL7c++ zXX*JMy5A|Zvp*ss;?InMnf;%Et=|g$rl`Kck7|)AK*jfY;F$|CizmL!)P_aGkBtlrya{V@D_UU>TESj4a4%lt*7u8 zoQZ!Srx@coFOPaEW@DF&fdQJ)U%^szgBQ>ZJJHU3h;DcU-RK0)!3)@ew{Ql|;g1(! zJKFNM(4So|8gBqS(ywdje=CEtEV$uqwDMB2u(B!Wi?eVcE=CjGfhO_}+Uf(yCl2xT z91fus782e4%8_nIEqW9S(Dz&F>Ax90!@{??4sB&QSKfr?BTKOiy(62^3b&zmVmBIS zKe}-*ns7gQ#=~gf@38@|ru72aYKLnw24>QPR@RDEv{@q7t zz)#cjL9~FA$S3lA`48GCx_=7~O{5)7EPIuKXR#aI@B`$YL@!$LAR0KA*1tht%%c_D zL_6Y_iOxj-zB#!htuIGA^lX}MME1|(MF#$h_6pk4F7(X0(Id#vL=L6(J~Yv<&=wD& zKfCj2A%COqji8bqWp-l^%xDa2eH`~9zEV8(0F$~w@?)QJW+1UCN?l{_ZrLxB(mZ#iZgRSphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Vytvořeno pomocí Sphinx " +"Vytvořeno pomocí Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.mo b/sphinx/locale/da/LC_MESSAGES/sphinx.mo index d0006ee21184d961016d57d28e97a89e4da0a4bf..9c838221058ec616f5be3e12d8109a84cdaf58a7 100644 GIT binary patch delta 2243 zcmXZcZD>|y7{KvcU9McZ7kk-!wp`n?`Y;7IwsaGkB2(v*jif%m#57~=Oa34}yG@-~OREQa_vLtb3pg~L0{(qkf9?tKa`#$HouKPOoc?Q?M zzV@@J8ChpasjN7q+4uy`!OfV%?bwWO;Z1l9=i#?_3!cF=BcMh+fxV0XCt}x0I&rM&Q*9+|EEp*o!`}1MkKGG}p&?D;|mKZ?K5#i5NeRF5oiq zOV{GMq%5B}hZb0kH{;^6ET6cU0UzwdO6$0vUdDSiUnTM?vUE@WBsHLc+tA9|u?9E9_;$4N7s4#;NADj*3wQ@D?A@5( zhbH_4?eyWeK87XaPbXsHC-fCuLN{9xTiSp*G;uXn;JtC(hIV8Py5fh?&Gi`i+!i$P zHay5z(uWpSPdjuu7LY%+bK*+ZqnmJR*oSsxH?rT-08(4pixzkY4fGY7__?U?+2E z{AP4dbt1QA!)Spc;pb?)akStQXxwu++wcERPHgSpXrgH}z_qZDZ`04SgoB@B0~&A{`YKkT zuc!n0rCts`{|Z{rAlkWMbfE{(j*MbC`O`QjCO(TkcnNf_KJz7WT*ZAZD&$C??)R6Mqob2hfD0Xu>h{{*!3y&!G2TMBn|t zFysm`#TVw@ PI2&p$UNq8G)mr#J!FkL} delta 2247 zcmXZcZD>|y7{Kw{ZO+u5rgNsvJ#MZwD<~^VpP4IiEL*vjX+Ch&$+JazRrD~%`M$6 zJtxLwZ7HSlvXn~k5uAXlaR#o%`S=2k#e;Yeeu?ApJ4|Cz8pew`Jw7R=9G=4|n46qZ z5za!d>#zh1=<|(}Q+7V^Vg{x%&>F5pA6SpGup7Y@Y1Lo1hwRj0$5!X#nyZ4E(6Ya<*WWS|uq_(sZEpQJS=rc6&VYHxQG5>pb z7JY>|s`t5S^!_=R8L*L)X}ApCe2>Nrop>qNThIXSq6PMcpChr;5wyUQ=vPz3!A|DU z_zmcuYC~>GkD&!@s-*vH(DX6`{L*d?^Kd^_;|LaT2GQo?ax_2}`rMmn>-V55>qk5A zH8$cPT5u&h)B-O%n$qi7gMH}cI)cPX-=hKk#U)t6vV7M| z@%$b@7t)Tm;nOj{A1z=2-4la&27k^taYf(G94+7sy0T)HZ{TTY3#-uY`#Q9sdFZCR z2`#u836)l$&u>8gIk%!K?Lj+p0DZ-W(1Np}m^gv9>Tk3Y#WkZ3OhFS?qYutTS5QC` z-GTzwf~@r&Y}T|_$GBC@=FyQ{2b?_0UOcI zEJj~Z8}du5IQU!_TF`d1bGy)m_MsiwhttWQ1~@VC5c=RS`cHKV4R8*vxSVg%`8@hL z)}!+UH1Hj0VRvHSphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Bygget med Sphinx " +"Bygget med Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.mo b/sphinx/locale/de/LC_MESSAGES/sphinx.mo index ce12882dab91ab21d8e62fbabd73eeb66b50bf11..07748898abdaa81c195321442e36276c316b0121 100644 GIT binary patch delta 2251 zcmXZdeQ1?s7=ZC-oo%k!Hs_Wu+iF`|qhbv#mVvQqQyIr#OsHsD!&(uB!@@`y9MDym zGz7~s(~Pjd{+PDW2f2ihK9CS6MWhB5iZpYj3JuJdASdPEr<@g__0@`y@nn$y=GNm$Xz$$FR%dj*0 zOR}L8Dt?+nw5)C+ouIvwV3o}GBaT#W?8eM4(I$wtt z)PmPz8~XgcF`ipR!$bqfFRkTI9d1Gcyon}!7cF1{y$fHWD?f_v*hw_;-{^bO$S;*} zt~FSPj<=)v?nI6vm%8(fbRQac0IhfpHsVt;z8$Un_3*85ANu?Ow1AJ$!aj-lBWS`& zbf-^5{|wF{e>xWvg@}P`O}WSp@Et>7ylvZ3Ww0=#*v)qD0&2^(YtUi z{0BSfXQv*?+fk4FijC6S{(fXhD zqDOQAZ^YXA{6d!D4fI!`3w<6vx;M~5a{Fj_IVRAFuflK9LViN$|3X(>#CG^%1^Rp= zvdgIzo$p50l2%|nK8fA94ZS<3&_d55@pGw)8{s8vMguNHS9nK^FF^zMqF=*GbZb{f ze*=0+b1^;=?nUDr3_r)2BSnvD3TONM|4PHa7t!x_Iv&Vy&?YWL3#!HztVIKKg<15> zd(peohlEJ$V*Dj^CwHMcIf}l22+PTzKBG~OU!#SbM-yK{Uo2+73|xbb-;5?)gs%K9 zG;k04et(QViu}_07=H~-ya!#-JD77|G$!5;C(y))qyG(>@D#fBKcfNuMYpu5IbTQ( za;&K(`rTMW|9&*jgXrBDK;sQJ^M8`x|BDQ`vYlw+y_mrd;=zx{HkTeNENp#b@Zquk Tii>44t!@1kO=BDDmX`bvbYIPC delta 2255 zcmXZdYiO2b7{Kv+&YkBrU7pr-tIf#@gGDW&FlKByUZx;s1v;}v!@@QRJJQ|{BtX~_+d1KB1aN5QX#Pf&4T`a-wVe3yARKEUDthh^jPM2=8L}z zvTIUG?bRt2<1m)v2;PWeco!bTBD{cAcnQm}pvIq+DsUdn%GoK+!X~W6Hk^T-(O-o# z>2E;a-#j~IuLpjTfw>H93tvS8?82MyOC)Fd5i9Yx=wHMN`e{ynyb@i&LS!m6N536S z+<_L@g{8P|PBx!-V?6jY)-y4Lb@&0U#6#%HuVOQnQk?}ZdWjCHMeZ*v9B@ ziTQ1K1LM!d{79CDf!{;7{9|-ikD(Qw3a8M3)9A|nLbtGpXeO@4LY#-Lv<{tbKnrTc z7HmVGe<;SYn`oG*ANfmz{4By9Xn=ia!q3nGj-Yqp1iJDGbjPO9#MjXGJWrab92Z~% zI=&puw-PyuY|7*t>0vZ*KU(otycxI0_!wIG?(n1VQ}p>9TEJnnu%j`55=}UX?(~`H zU%(pjr^_)>%oX+s=AxIa4Gq|VCho$8*c1JJbVr^-SM~yWxn4ov8$}cE#9_XYy~wGh zrEG`q-Hk=$PxsSsr9J5F9SmRe0s6z}i*KS^x)3=$5^O&A11zUrsc^sqk0y4xC3eGnMk`G~nWJ1yW1u zMHl*P^xv;z|E)O30AE%bNB+_zKkfJ@8mNVH@gJhDa0q?w5Rx-Zphs{Xy$hGa|L{Kg zMO5cebfXJf8~wg|_TR1C%D{5mfv(^?w4h1!AE0UU4wUg}G+_;z@D5y!E7187G|{{0 zPVT}C9*p_4I3KqJeZMYC<6bUDGcIGGkL6n7D0=4m(eL_ebfw>-D?A-ep-1;SdPLXo z7Hn+HFC>Gl^f#jmeFHtZedq$SpVRPijH441;V)<*)9CzFwBj(RTj z2?>?9$M_h!lOLixnM31$k5%MPKhS8zpU^`7K@+=AzF3Y1u1CjjM-$$IuDlZsybgW8 zFUFrh{?hX?z8g)vA6?KVm~|i*6W@g6XyW71{~1kq7Tx-DXn=wx`7JF&3#mtrHQgHh z9xS520nPI$dN;P9@m^cP|4DxTZ!_S^_MnLmU?Cok2an`lFQ1rMeB0o_V*>-Z-s&r} PqWw;9b#rcLQCI2zDfG)h diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.po b/sphinx/locale/de/LC_MESSAGES/sphinx.po index 50ba7490e..50db2fbaf 100644 --- a/sphinx/locale/de/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/de/LC_MESSAGES/sphinx.po @@ -629,10 +629,10 @@ msgstr "Zuletzt aktualisiert am %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Mit Sphinx %(sphinx_version)s " +"Mit Sphinx %(sphinx_version)s " "erstellt." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.mo b/sphinx/locale/es/LC_MESSAGES/sphinx.mo index 87b44fe64eaa56a977f436889acfe68467d831db..825cfedb827d8fa7ac868d581bd1e03ea1ff4428 100644 GIT binary patch delta 1912 zcmXZcSx8k;6vpv=)10R)y{1`aX4gm(vj~k)OCN-2upsF|(LfMkMMd<|fdYlXW*i8y z$sT&pLMU!X(}R>nMJ5CmMF>(9Q8r*?_5W@Q4)=HVxYl0#Xir&p*|mK>Z-sMid4h9M zcpBrd4YTkvPQ<&Ignbx`gP4wQFcE*?WQ?RS0W&ZXvrzMMQ2WfqG%PZ!6P*`c7^Gt+ z1G_O9Pa}J}i`MQ&C3XiVVZXIsp#qH{kNe0^4E{m|iXdyPn~Kvg4>Pd>D>0bl{Xba; z9eH$gp#l$}D)JViam3o6aSH7p7?1H}%d7LFDwdBaScyuc)(oQNZ$lkm52`XpJYE#2 z2_x_<>O`%m!0niiov3+_t$zR&U6Thju&mP z5i@X~4K$$ww4h3R-t0nc*o#W=KIUS-^?yPoI%@theH>f!V^9gCAeHu98ZTOqiwanP zDrvE`E08^0jrDIpm3jwqSl57B-;7hS-P$)%6}XK$X+P>9FHi}*!*f3Fe}os^`4K*0 zo$Ms)M9ru~LZ}TM*!Xi)LNAfWz2`@XjHC8Rq?}rpiAtaVHNMdLt5Auo#T4SZ%{H(X zb7&t%eZ7}Z8-|b^T_5V?FOkQ6<7Ya?GTDy-T#V&70}o;ewqX%IL9PFbTA#(=u&0w1 z@uCuzVii`PPS%JTKZp9W=|ly%i>kmFDuFnnhp!GbzZh$93F^)pZTtl4BW*=h`i7tT zSE+jG(85Qk%m+~=`;H1ckuOtsmV?@GHtO%X(AtZUsjeKA_kR6zJNiP0HW)|UO&VX40?tCU1E|1@km|XmsC8>`9&W+_HlhBp+(4}x!#s@U6uQEB zsC|~ADpu|BqLZ&gB~XXDn?1tpET3 delta 1916 zcmXZcTWHs17{Kv&t}Wfc+06cKy3#qO>BvJ9CB=(vrGywLY8P%e6ud~-C>6wuA9w&Q zP@D(UDbm4&E^@lMm?KdskXjaa7D^@&4ngrkGiKQLJ0JM*|NP$L^Ssad+fL2vp4YV@ zFZ&>+)KrpEA@0W_?8I^SH5TAS9Eq231m3{cupdkDDUQZM8pE&>U&1PMel@yJ9ge|S z;iA%%4J~Y;VlT8 z#71numXX{w zHoE^(bY8ZS7dL3dvA8J)_Mia{qow^K>_Rs@hbH(VR%2iEKSUFK96k&4IkxkQ&;-hn zN@pp@iwkPdfYZ>D)yg8zo#^^QSb@i*-Gf%(JbKbT^dQ&K1pdO# zJnnyh7w>!rpRgzEKu>fCO{5py;O7{>iY9a$dD4A;OyoJbPZ{NO-FP&CY3TTz=wFB? zvI0jDKdp^{jW~h!cJ%8#fo|A~c2L6t& z&*N{`^;MX8vRS-X!uj|vHliong^nLX|7=d80WP8y7(^2&A^OnOq4Vo;F)l#w{IeL} zhkm3-(Mq4qasQU;JRL6l4bA)(TC#u9z$5rFy|Ws0!#B~t>zUD>k4#NXXyU7|9NW>8 zZ$qB+9Y2o$8upK+{@&4JI@}0bTbY*5O*5f_u?_EN9Vu z{=*t9<`iDx40N9cv|{gPym<0uXaddX-E2gj^l9{;K&qX7K);ErVLy7J2WUlxalww4 zqE}jpmUA+~5gw^QB_a3^z3gk)6(cXfNZ$$%kpm%!|t-!b4J;P7s c7rxcrwx+FZUu&+myQAcnqG)%w=9U!x4~A;26951J diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.po b/sphinx/locale/es/LC_MESSAGES/sphinx.po index fbcba7d90..fda55ec73 100644 --- a/sphinx/locale/es/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/es/LC_MESSAGES/sphinx.po @@ -642,10 +642,10 @@ msgstr "Actualizado por última vez en %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Creado con Sphinx " +"Creado con Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.mo b/sphinx/locale/et/LC_MESSAGES/sphinx.mo index f37df8ec885b15f282300f7daeeb67d9b1b623e7..176d513e16dc7a61fa3a6825454626979a6d1975 100644 GIT binary patch delta 2247 zcmXZdeQ1?c9Ki8&+illYcQ3l7>882n49kX?6D*lEk&Tjuk%liQ%oR21R;F1*kM#0K z`j5z*WHF7vKYZ)fQZSm3BBUa7$`ooLWl>qlB2h-L`hL9!#y;nq=Q-#6e!p{`ZLoEq zHGe&oEDj+wmW5D^?_mjU#YxzWbMXtj9j{_34&xp8ABGg|@(}K(SyB-~7N_DkY{1*F zIrbM}n*MTh{_2X5+*b6Cmv#`t_|Lc@i3q9xypR5Kh$BfJnDLKpl6&FpWqghj08##t=FN;K06 z=<^yhpy^nT4e0wz<9M=)h8uMtKj9^Q)!@760-vB8?neXYL+`>VH1mG6VngW0Bj~(Q z|e!l_7DHW2WhUbM=%b(Yz^pwP3Xo8@g964_B+sutV1)~gkG+9(0SX? zjdx%dUr7(T?rh58yk^X@e|U<9nXW zm3$CguZ3T3+>Vp+b)16T6RE$EA7OwmE1WT9J9&R1<1J-&~{1BzC{DPh*UBO|I#qyN@khK6trKDMm!5G>4NyY6}>BM z=!WfRNpr|O44cuwccJqRL=U6$j>Y}}miqmFN5hSOj}L~?l8?mxD4KbOZ`30xLpPX# z&U+NCU^8+$p$(^F4h>)@dS~{aXMPkt!hXE<{SVUMK7}jjf*zQq&7hf8pnpnh(TQ`> z3e86YX+hsxj?V8yEAuMO!ne_R`REb!y{|E`ae{`Co<=vmfR^e9^!acczlkoK;sC8k z7TvfCy(9HF4I9y;TZw7xjJ}Lqqp$(pZ$};flU%Te0VCXpW|T)aK8|j5s`rDEfpmK2 S+FX0@nzH_Ep*5#wPv(F9zs%(T delta 2251 zcmXxlduWzb9Ki9TyJ&ki=VmjvT$^oL4O+axRJ1>uw{m$wSr@@e7i47UJ6RVm(F0;e zp#O->i6tWo{6j;xVO|RDPIzPJGK&VHuo6?L71faZezz0I`#I-1&pGG!`~Q?Ltj@H&pd-|;RSHrk&MQaF}oeo+VoScPLSjl*$v z>_3Uw^p~RZUnmO6;KHx)po9l&qwk;#ypI#`5VB`DkNJ2d_HSW|ekdM#o{uI_iVTJ7 z*q@AUT#p7g2S;LKaWb^=viM>Pj%VO4EW_P60}rE_|AW;ylIRTZVSWs#9Q`ulJ<(ot!9FyzKhP59u$mheVit}?Gc7~M zE6{)*!bzA$-+wMXPgc-yqbB5EXy&IJ-$obMi*9%T4d4WN7fzv>ccT^SMK>Nm=Xstq zLmrO93iSC@biWzMQ6%B1p+;DOF5HAhyc+Mv*W&XwH1a*skD~k0_dC%5j-!E{jN@m} z4KJXT{yFxq<7oB|f5w4auCPZ?f?l>Xx?nxJ@fpPy zJNQc4(RJ%6hx2A*0sDtVG|Y4by3nTRR1_Q8(Pr?4xpdmr)U7ZXa+aYfCum%%we+Q?(REZsAP)8?DG=+*A{4K;K(3p8C7cN*>hVn`l5CXk|{IB|e9qR%{Ad@}*dX&1k?oqI;uB2Msg+JbE_z6Po!iXeItdH_WRXio6&-`v=j$ zA4N;rfF8*+NKRoLTG>|g2u`B`{)kjE3IEYB<8jO~lPa`dgGOA3mULDepO4;^Ms&j_ zw4^P_Jq(-C!1ti@4n~in^S+4v9vtQO-%G=de~SbCXvuHK{&2ocGf$yMG6vnC7M=Gv zTEQof(+Q3E0Jfk3>_+d*hv=Dqh92R09Q^(-(cnIXK6Jrs4$RV~(9BBEKc$n z8<(PYqy{JAH1z16$85|*Uq!A_SdZ?vtD66lT<`-P7~#igMqTK}-=G_v>3lb@J3F_w UIrCB`)49CxT*3eCbb0%TJI&C|y8r+H diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.po b/sphinx/locale/et/LC_MESSAGES/sphinx.po index 10d93f9fa..3d2e56f4f 100644 --- a/sphinx/locale/et/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/et/LC_MESSAGES/sphinx.po @@ -636,10 +636,10 @@ msgstr "Viimati uuendatud %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Loodud Sphinxiga (versioon: " +"Loodud Sphinxiga (versioon: " "%(sphinx_version)s)." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.mo b/sphinx/locale/fa/LC_MESSAGES/sphinx.mo index fe705e767ab93c534b9874e403f9950047475036..a4900c710c8b2735536029bcc525946dfaf97cc3 100644 GIT binary patch delta 2001 zcmXZcTWDNG7{Ku_7d2_pOKi+0v6pQLG1!f?5Gqw0Yxc=XL@Lrg1dCSlP(rH}A5x^p zwu+)lF!)fsMe)|6G^iWVC>8W2c~GGS6rwE#D^zJ=D+VjR`2S}Imh+pLGc(^e-#KSX z#pjD3y+(;07GQl{kjYIFb4vrv8^`qO;h7bE*G38nA*UwulW_$7Tj> zM%Qh`HQ2i{i|C}WlYs$z6j>9eunRv!6Zi$K&>wgmRiuSHWqdVyzX#o~ z53Ohs`Ndu?CiYmC8l&ifW9W&-(2~7{2L1r+@MH9ZpQ4F;f!+8GE+v@8D`OZ_Rd)L$jPMfaIU6Z{o7;>9%H zbbU3^ma18_({SQ?G|)|G0)^^?*oK~D2U^OzQ-2R~xOgayA3{rf6nQG~2D;yAv@)My z2TrH{95(X)#XJp9Z~H6X;3aMJq9rJe%(SjK0JR$kJFuU%Cb^ zCbSMILfnGJ+o8mdd(({}w6q7%m-0E}7jJX%5pgv=kNi%j0P-n3JxE; z(F%^>CLG0nd=E|ZLObL8lXTqXvY0$fCEVJ z;wALNCy^Xt3a!NVXu#i)rxurxVnuDn196}eeQ7ph4;HZ(M{odNMN4}QyYNctxA9TC z?q)Rbc68oO^s9OhJ=ic(Pf+*9bu zj-wSQp#k5)+i?<|_a~ar6?Fc;NM*99<&C?IfgJh_ccGaLp?^$=(9iD(dctRr!^b%K zxlW?%%9zJ9=sR&9{md>W|3edN%vTT8irfAEduSM77|nD9o%jU$G9E!Q9!vcb=)9BY zyh$|RG&*kU0mFFpEqzndV(j>1;@+V8gupa ay^kE+_wryzSNZVr@0yl+<-v|S8~z9EF1CjN delta 2012 zcmXZcZD^KN7{Kw%tv$NwW;wOJ*nEs7R&yI<3zW(p8zQ|DWatOc3=D~FiM?TQhYnPT z_0Z~r^kySeW}9BgGaCuKf$>;g8bqaF12_O%dm{e_ABrztVh>1 zq5CbuIoMhg*_FoK47gw|F2F9FiA9`&dsF{V>Yqdt{SvRi(bPYW1{_Bdo5X2Y!Da@m zLDx0oJZzhpMKsX3mw^IqLe|6}Hsf(LfuGO{{f<*{9H-;u)X!aAx?h8{8J~mRzX{#1 z1FdK$@{0{zOl(V*8r#qXz37RGXvqf9!0%x>4x=YLiYD?gF2v9AN`h&891U<8O{knr zufsZY-wrfRww$YhA3~qaI`qVkp(T0}4cLb+?8iEMGxa}2OZ{o`YjmG6G{G}?JzhxT z)w4>8)|Skofrb+opn+~g6KE|>h-K(W3TP?sN&U6R;bLPN--?!a2l7k$99(1D*(2{aIFW4R`M6;L&3H9h+Ag$m zFQO;giB_P92HcO!a0s1u5l!e4I{#m!GFjw!Be_*wKTnn1^I;Ds^qTd}H*#!?#mqLYgoZ}J9qp(l6_U9c1T li?g2?K2Uj}JlEROy|KHye^q_+@UzulO;7#dRrPmH`ybkJy~zLo diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.po b/sphinx/locale/fa/LC_MESSAGES/sphinx.po index 92caf31a0..5a149d1c0 100644 --- a/sphinx/locale/fa/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.po @@ -635,10 +635,10 @@ msgstr ". %(last_updated)s آخرین بروز رسانی در" #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -". Sphinx %(sphinx_version)s " +". Sphinx %(sphinx_version)s " "ایجاد شده با" #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.mo b/sphinx/locale/fi/LC_MESSAGES/sphinx.mo index 497088c8f61bda33a33d8c835ae30a9bf67daa96..992d6dc2b4b3d2a370c6f0972b1b2e33d758b89d 100644 GIT binary patch delta 2170 zcmXZcZD^Hc7{KxCxHYGy+sXHK&NLlDi)l=02}Nei$g~%1LS;qFEnAdWnX^7TW>eB{ zBPy~Ng5JWXzr?wn2K-VbUc6)@L1}f zz)JdO(dU1tjck15Q3hr*@M|*iJ89t#B@*P8>RlXl9F(E$D_Tkep%-TC#`Hz?-lFH=`$fCe3%F3GKv1xEEdD zm&QLs<9vZ8mYt?iq%nd9xQqs@V%7xapm*PZp1cvQR0|sTKJ>Z!kx#VqH3z%XcrRM| zH^AhIJ?H`V zqU%3N9(JDiahwKKk5g#rzef%m7tpufdXAqIO`wQg&2{K}3wq+)(dXBv@lELZZgl_M z=+AT?T9H1?d~lG)d>lqM7()YAQU*_+M<1+1A8bZ)i`$S-Jjj;;wxYkDJ;)aEKDy69 znjbv87#&o_JmA zKZ@K+bYU~@Ko3wt9*vWA)ZYhxV!#0BaV?IacejF9-SJguBKM$~KZVYJfL8Ehblp*0 zj3<##{LYsruI1r{*oeMkccGPT%V@aKV`w5zritg!%wI-6@eW^>_;d6h@eF$RV`zX0 z_2nxnpzp>~^dIpSG|+1FuXqERz$0j-vQ8QH(rVUOz%Jwxi|G6La(j^eYv}kie-_}@FaVXs>d7XN&C?aPAAWz3I2?p=&v+B zX?{8IOtg{(^o|#xSF#jM@MiQ1R-uV@;Y5G`TWGjoJDS-}q^j{cxn~v^RM1Kvo;Kj*yBvZH0_ zd@gH?h|i}->U@F2QNoi7bs5@Fsi>BNx$+x6<4>GolPXzzW=tML3fB zqd1lRkLdGfW=3{n;|mPTVc_><(X7c0s&GEzi_uuEcnhvi{Y|OA9Zh@}@`=IJ--`wu zLK8cPB{+)48=I9)K6s9SS_Up-4VIQitj62X6K}*txD8EUH(IfMSd2q>GagR;<7s{j zXEQ#Y<}afAO`sK?l2IoP9d&4COOws$hO3dBq7^OK1~hONPQk6{3479fFPhK}Y`_6@ zeIbp1fyVg~O)UF{#ylEl(E!)cfF;bDKn;5L4d}@iqm^n#13!U2_Z0GpXZfna-ZVal zmVQt2GjzXUB+)F6(pbR2$uw~Z&G?Vx)#P>bWYf4f1DBx*m80wH(33TwC0>&H_o5Yk zFpaN8OW%nzh#!44+;9-x=v}PF4^w{_J>dv?lCRPAKcNAC!MFGoTtE}rTsi5h=t=w0 z0}i0;4Bs3o!^I6@Bq5* z2sYwZ$S1Dy<%wtW@Iq`v-?7KgO0UakxX~swk*#T>7tMSC`NT(jS>h4&AMq4=_kW`S z^0!T1Q9b%@G@<{9_o0DW(ZAviXaXH*rLry>E_?+I*q8e6p(pqlE!8nxfoIT-=5TL| zunJ9lCA#qg=+E>KG?Dhye+Ip}=h2sY3sSKx`e=BPcaW;b9`vNc=my^=e?}Ah4L#Ad zG+tIe8Mqp)WIcMv4d|6Lp$V=+uV4+D=oT#Y_uoUq1+Sx-^&?e{_t6c8(SW1q+x!C> z=v?YwL@RX#Jz+Wb<8zhhe)G{^!}2uVhL(Pv5V-|G|;DL#zVr|3cSY!FDJ9p<(HZiRx7>L{D;0as~R5twc9|56K-vU#O{lF8@CshR0<9 diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.po b/sphinx/locale/fi/LC_MESSAGES/sphinx.po index 4a329546d..a59dbade1 100644 --- a/sphinx/locale/fi/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.po @@ -632,7 +632,7 @@ msgstr "" #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo index 4a9d51f28988e43afd99d95bbaa8a6a2ecc9150f..bc97170335816a71696c806560065907b5df6656 100644 GIT binary patch delta 2178 zcmXZceP~xz7{Kvo?l;|*?!}q87uTk1Ml^<2vq;Mf4JMM%3v1A#7EF;6hHVAH?H>mU zZjgl(3v&5~VKiyc>zGAFI7Wqu%Os-FCMFrZVnnR(cRTQ7pL@=|_j#W4oO9RTda(86 zL|(Q%B6gKTEX4P)7{{<0Pvd%=#sXYf8o_0(#v)vYkr%N6mvgzXEMf^hh!yw*F2J5N zehzbt525eBP!`!-;6Wy?Wnw7#J{sUltj8%dSFSu_F)l;L^>_`gP4gSk1+*f+cqom# z(8S$nfxTFW`^&TW#Qo{PV_3tDVXVRl+>95|mEW{9q5P9=5;Uerq3+qqg zSJM3He567cx(By0=K65 z$Iyhk&@JemH;d=FFmOLw@r$?$2h;p1wDQlB6UlGT=f6V>m_iG?nC}0HCj1xeaE=4! zxB~5P4VG~JqKOMzzX3f|ZD_!qXyT`^68ENYKiZL(&=ns=S9Ah>?*lx^S22bbwCB2c z_n`|tfG%(V3&|gEdx0ON2R=h997nnw7tq3fMFY;F2^Z5}3#mfyHzr%qt=pQ$ZRqnm z(Re*bZE+AYCtl;i7QKU3_9^;3&!7qZLswcv8#tFyfp)AB4YV0+u??v$deMXf$gA-x z`We5AE%+^7kEK=g|4uHN`POd3-RNg`G&zbUo=pCT_cFeWuCSRZOmGj{!FJ>qo&32Q zGqjVZ(8K*TdS!|9`fq}Aj`B9FM)$l6oqrl#*|T^T9!dAlp@F|g&R1N)cJ@4< zEOm@Kc*!lvkX$i<3-AQqfN!CB&ia6fE}(~F8g1!iBxdB%C%32;>u?>~$_LN{&!qeN z(Jg!#4SXE^PdJRm`4HWbN%W9TqlITbb7AXdkzW+n&F}e*Xr;HJ0orjr_M)vH#s>TZ z-GUjkBeUp2%Ba#-FGmZjMe{VF3vNN)%VHB327CnFlilcE^`VF97`l?t(g%5V1E$Kp6zAw!Wp({Iqp8ioZ!B=T~ z4lVc+8fVe!`4yI-ovA`QcuSh!fj-xcOUWOdT==>5pes0(9ypB6j0e;F1e*9vx_>^6 zr_dE%O8$lx{0|zhn0>N?W$1i0`dQzMkGkU9xv-VnaSc9>e4=pxbND(M;5ZU9M$m+l t=%M-nP4o-8HGg0Z3q~r7_vUg!R{{bv#$rb2$N4duwiHVA-(T$k<5z!$gT*NEj()N$7}Q#R!+t&H5v= zw~Zo+$|A*rR$7Z*N#-9G;SebrwIvZsZNVy|G9sz(cfS*iea=1i-sgGFbI#rNtb1zR z;o*Ypx`^0T5mAgE;!GUEg?Jp>@JF1E4YMN{MhnisD=-QoI&eP2&N&g~cr(t!J8&BA zNY^{Di0h}(_n(~;*;L?tOjI**Ao&p*;3QszXV6^5l@YUWK63SQQxCbq;7fbQc$}FF_FFkk=Yq{|@*5C6ID(2rv_lGhD1|CLRK87qd&Y=~Sl0_@gfHg=hu^4S(JDPYE7UH$&N;jZ| z+<=R*3#ST9^SjZwSsw!{dLHZWEi~{jnrH+~JdU1$-_aHSjdrSpmrdA=zIO>4Z#lm% z#IHeQ+!t-c{ zi#cFkSEC)S#|qA0EMs8nJJ3Vbg$CS?CeGmkyf0n%p&i+au6RGXqBqg^KE}g*6+>u2 z_gs+oL3E*yqYLcEQu4>U4)Bxoz^7=1!$_Co6k6C>G++UJHDLu>NG*DQNwOW?y0z)L z3w?e&8gB_TdcUNm7p z@@l+{e#Rf*3LM1-tgNB`D;c!%tzC(Cp`YFUyxv^xp*YILaHa4&C!^bpBp+We;EnzL4&ZqJh6h&R6_~ zUF>-YSsJGa7hYQjcbfwpoZ znxHq`e+=Eim(aii=wHG?G|mxpOUBScI)N6R{mj7D6*lJgWEQ&TOVLW((EyvV4R@lg zAH-%nhHk-6Xh#aE&V^K=t*$`}YeMt1q6@wXc`u7K3=Fsl-IE-;S9{RI^g2%cQ%W93 zpC3UxGoI%EK@*p7g6%*#ny?Bjqz*5|mUREdsrih3W8i~Z(3W(gD}N}>A4FGn2tEBn zXo4@(^(b2KBpRn|QGSJ0XlLrt4z{KFo6zSr<6QE`oecck?nhV9pB~tY%ea0e&7VXQ zkEHvj()ADM3MZ3)paq{t<5jRvcCZSaZ$P*Ba@^#KuV!E?ug8mVEAolPlURhWp#cVv wnDIWEa11?Er_n@b(XBa$ML1({!OWhb;>+&N-JZ)0_E!v)|3AK__Vd#J06m+@v;Y7A diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.po b/sphinx/locale/fr/LC_MESSAGES/sphinx.po index 7f51effd1..3bae76325 100644 --- a/sphinx/locale/fr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.po @@ -635,10 +635,10 @@ msgstr "Mis à jour le %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Créé avec Sphinx " +"Créé avec Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.mo b/sphinx/locale/hr/LC_MESSAGES/sphinx.mo index a9bdb145c818f1c69912403a60de10a9a799174e..31dbb290f3331426c9fcde51136228014a119a82 100644 GIT binary patch delta 2114 zcmXZdUue~37{Kwzwv!(7xGi&kI-6~xvp+Kuq*2juGLzAYXyq}aH=-q zCR~X28?hQY(Dzr=MmDqXLkuirpgUPYU)Y9i_y)3OjN&{jr~Zl5A4e0vjCFW5^{3H* zIR;H^F3!P5G+tX>R(Y|Lfo29)E3a#)A8u(jm#|t=< zU>eV{ovvR%6RO7+%`Uyz)K{Y#R3|O87QI?U1;V#$w!k=jyQ)mty9`BQy+9LNnfsj=zY08+M`@zlUC$L+B2jK`Wm`3-}YgBRM8l z;bOcC2k<`Ji*EfF==0w^OLI{8dmTDn!r)?Y%if_`5XG;-{{veM|3lG{7)g>0WgGgK7R)#Vk(I@WpYoqMwuhpaJr&6>HJ2R|A?rGq&S0^ts2; zil0VzVk3GqgUIH^PIP_*jWar9#!o5@7dVYpcn&E(CeVP>=+@mp6V10(&VCUZs57|= zy{x^-5?b-rYqRZoJNmgJdIDL@!!$A@fW&a6~8(@ zmq*82kS{=Vpoy$S3o4=Uo<)CzVjvB?ieAPy(SI)c%9rx})z!?x#) z_@M&9?1es*6eOb>B7SIT3^H6rCd8s;`N2}Ceb7;)MF0QJ9gOq4U!Lc_uIs+cRTJ-7-7aVCx+e=*8O4SsK@Dq;e!qxo|oB9BveEmqHq zxC$4d{YIRD%hC5&%!_P#;k69ZF|a<_g}%^>&A1C$GY(=c9!~u)QvVd1_!*p!7gGNU z8ZgJ8iPhq4Y((QNou5@+yn}&73~azg+=lCLCtBp^*n;1n30y>XEUsa3$l)9;q<#^d zUy2Lx#x#Eyx?U%`!w+XPNHShTGuxef4PEd65-Sd(TXqCp_&8SM3ADm7G?DLc8II$0 zf^6e-g6R4MG@*KI!t53rF5HO*dH@Z)13mLTwBmkrhX&Dr@1gH~h%Wdk*5j9H{1-If z1$65#CaZYZbqh#hS=7;3!a!4+Xh$=@JGn8r1+AovCeV#0_H>$m0S&kl-QrhLe;>NT z@1*e|bn8FE0`X&QXa99OJ&03Spvdn(z7-tL#sO7^19y^S8(A++KV^u4c<+~Y^& zFDCi$y&UJ`bM;ulR?M8ZhlT;V(2TdE#ar$+LA1z>pg*7n|L1Gsofb3D|jDG;4pf&6X;p~fxh?;`n9Yfx|!FZXJ0~} zzYR@bUFvtDg_O~N-Dn~GslN+7g6sf|)ie&F3;l*I_!qi$ixyWFYC{vc9ZjGEt?=ID zR`k+6n&$h^00U^HucPY^rTLMHS$svq7f+)Voljmy1LR8;7ocCSBAP%6m*Gw5bN8VY zccDA64LzD3Wb@)>bpBm5&Ii+G5l3mbz)7^iQ%Lb~1`YTxx^>mfl|=LC*)Kr@tx0Y` zFYCr+8Ljx4WIys3d-(8o;3Fk|d_uznj--i^)E`9yoJ5b}bQ=FXjZdO?<8O4q9KSj~ zmq*8&kuN~Bp^0>&1(nfwk7JWR5IfR9hF-=&^qSphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Izrađeno sa Sphinx " +"Izrađeno sa Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/hu/LC_MESSAGES/sphinx.mo b/sphinx/locale/hu/LC_MESSAGES/sphinx.mo index 64f41560078a38df44af483d53e05063032f0ef9..6f79306c2102411baae60dd81612511a1ab9f2fd 100644 GIT binary patch delta 1586 zcmXZbOGwmF6vy#1HacaKugZLkHJZH;#SwAL45XAu4I*9G11YjH3#3hpLjGA`k_A?% zt1zNyk!0k;pvbK$wurQdC^WN$&;xQ)5q*DoVfcUUz5n~a=iGDebW~idc=X!m?J=|R zpjkX#!6^1%0#4vEe2?Zco5NI^Usjm$v%fr6Vvxx(7)JHiV=P8-HEws-x%VeAoAI^; z^DL1@KLc_Qm*WU3<~S;`x6V(fz+Z7G{y_zZ<>L@$Vg{Dt4y;3_STE+{J=D5m7{E7) zo>?4?j|{BBIaC6_Q6C19SQJx{pB3>?;GL*>wU~?zsLHgUD%OsE?81%Mjfyjj`tCU@ zficewymA8{Pyyyp34OyX^ba)U<)enHPlXTpf=KvTK6Hcqz$7s z=8e)&X0w=%^R6G8vKTOkZJd1?s`R}au#V&|>dXgGfght1oJ3V%8kN{Q^0Oa2RH0aQ zMFv>i{Llepu2W&4Y!$#D^R`DU8Q!cS3WK8gD7yL<0rvPz$f8ZSj9 zz8m#@J!TT$nrN^&yYPR&>?W?IKZyM7rR&e4j$#Sh&;r@0?;^McD^Zv35awY&Zo_d@ z=>tqE!6a1TyD*pdc7%pX)`3;njVk37D!>d@-~#F_OE`F)eH9OetPvI9Eb1scRN{AV zKR!WSwiKdPV+K+rJBFUl^c;-_&bSl9^rxvOO^e}%sI(!B!6>f7GSqhmP!(xLHfbHG z%H6^Z_zacc460(kP)8ci4b}!jA?mNjW(JgTG3qW28{>re)@Jv$cqBt3`RsB(R%g5hzk&k|KnHMg+aopA;&}Ff38% zNsxjfQ0&DZFnTJq3kYTpQk0?((ha&iWPN`+@Mk|W^Pm5mGiPR7ORtpnk41P#%&a)h zEEd~w7j|O+Utj?RN$|;6z5R^{Cu2_8JLQNxECvtDb|A_ypLLU1pPP>@0s~% zd}LrH&Y%+bi~2Ao!7L3^kjHlLqrhdTc@?+j>D7**;9%*G~E;11MI@1Qo)i(0oIS<;438}nY$ zP-fG(2IpMgpSTz>fEPLYR8;AEIA9&gJ=B>GpaMTeB{+_%z$a8Yn1&{lEDqQ)RED*viD%vWHq=>nBd24JPzgUpo%uNGyYKG(5+bvc@8uy_tT@7x+UM#{!`~0 zVh#?Y5}Za=Y#w!_0dBB17)+=BYHVge8Rw(!LIvvfo<;?1#vpb$`>~wK~->kO3_;g1RJ=Zo(|;^8CXfCa^svoQs;b8@00o zsDDwldw&X*K%?uQbA1n$&{fn%Z)sp7jXujJp=X!= diff --git a/sphinx/locale/hu/LC_MESSAGES/sphinx.po b/sphinx/locale/hu/LC_MESSAGES/sphinx.po index 8f01bdced..1a51d3bfc 100644 --- a/sphinx/locale/hu/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/hu/LC_MESSAGES/sphinx.po @@ -438,10 +438,10 @@ msgstr "Utolsó frissítés %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Sphinx " +"Sphinx " "%(sphinx_version)s használatával készült." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.mo b/sphinx/locale/it/LC_MESSAGES/sphinx.mo index a4213c8e09774b1c4610b5adbd80f3253e23e12a..04dfdec214a1e9219e92e47ade45e72cd15918ec 100644 GIT binary patch delta 2138 zcmXZcZ)lZO9Ki9jwawhxztr0GTC=%!L%2DeQ|P`3)J;q!5@SKDsM(7`DKi+7^h72V zX;Slr{kvlH5A=mK#=tP5EX1%N$yI0;NamjxS(t$@>igaO!R7g!bDrn$8L8Ef$b@=GVVOvMX!s#3a)H_-g2Ii*HyY)NSv z=CK;*MSlU-(Cf@u5#nou|1gjpXA0}r7SZ9pf^&^>ejbi!R|iQkF- zezd}4G5$4L`X8{F`O_sD2CU*lIB^~3urc}tv?8~oE4~9=(K7VCHTXJT!2p`jc|HZb zg08gY#>xWg(FBX(BCKWpbSDi<--qOq2GG;K9u2ewUD3;EBD>KQy@x(GhQ9w*^e4~+ z&!X`zBfnJ7{`g!68gC(HvuP})!FfsR&|huS@9X z^Dq~;AVW*L6a6grqKEo@^t~f!!r!BDPoe*qXMEApTtx%qNxKV+NLABXbbJF^`V0*) zf^OBD=-z&Smi{yJP##AU`w^|&A86(NL=&oGQs>E9XcTBHM*s01LIb^voj8tG;3OL8 zLijg2!PV$D%&wgFX=tLk=oirhd(aiH3?D%%lBLa+MtT7axD(BE4|=G^&=r4)eho*_ zL?)tt8gHY25q)k3C(lyPLifIa#_LA6q#v!oW7z8VzlnyYe;fL}?nWmnBio$zp(Qg2H|LtV6^OweZRX0F3;zj^E}V*{Lb&3=N`-* z%6)aYAXyzkm^CScVtflH;!e!qer&;BEW#g=U-+3zDgJ4vAcRqzO7q`z2q{dLhcFqd zaU3?reiIhbUxB{AsyrlPfnR0dF$Ok7-$ny;V;!DEVuy=ZhTp~ht=Jzy6MujeSjffx zRCK~RG_fp}U=uoDYekZOa4iEf7}$taxC@`hCceibeKAf}l=+^1o{@tg=JF2PDn$9@A^k@@I~pF>ylBKqDsJjPehh9)$^r=Sne zl@?FSFR%+TS2Nz-vYj6)X;whYu-&az90~PSi`9L-L-L|5oT7fHZ4Z8OqAXN^ZpwIOqzi^q$ z68r^CI785x_%s^lWpqL7@DCG>(TKy(bDfj z1Drs&>J+-SXVKDMLJ#F2n%FJ0awBNv{zem;$fVAbOrh~OjV0(m-exq=8LY=|&@JNv^w@1(F9x26|atNK`N4j-T6j1hz9Jzu{}l)RX@7oE9lp7 z9Zh5?_J6}C=-)%1tK{Ta>RNQ~pF-m`p#yux-!|mt&>uz*zfDgOepyu1O>ke diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.po b/sphinx/locale/it/LC_MESSAGES/sphinx.po index ccfab24e2..1877c786d 100644 --- a/sphinx/locale/it/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/it/LC_MESSAGES/sphinx.po @@ -633,10 +633,10 @@ msgstr "Ultimo aggiornamento %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Creato con Sphinx " +"Creato con Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.mo b/sphinx/locale/ja/LC_MESSAGES/sphinx.mo index cbf79dc242356e13aa11dcc55492c9053ce10807..aadbb401014de0804a07b380d9d4773e8fdffceb 100644 GIT binary patch delta 2251 zcmXZdduY~W7=Yn-?a*B6bZ*mH+jLFG5?Ponl60Xq42zA85;D`6qa<;K5JJjNQdwb$ zXtPx&nh;@Dwgr{c{%}Fah*%?nlu9sy6=H1AVWHjk_Q1z?y~pQyPv7=U%Y~M+<2l(Q zDW%5ZlnQVk7U2P`z@vCC_F+Db;!M1T)9?nS9Llp&DyLX9JEa-80Ow!>-h`{8-i&$F zA4lhJnw_%Az*}i3qoFI@j|O-P7vM)|u3?;xm!p0aZ=rrY+KWo2HZT`yN;Oemh9+)8 z7q|usv8^PVO1vQkK99H4u?ug*H*ghxg6{k;ti=LW=K>e=<${{f6MPtN#&&dJ8>0Sn z^mkz??Jq?CfsBHIUq_GpUF0;=d31#%;UzTSujtPHM2|3+XeOS4xmb$sbRODYi7u!P z7hwZB{;_D!Hc~KAC-O<#`KrXdXn>Pw!uQbye2Kn=3+T?jMNjM!n)n}d-gV@Y3c1&L zSc$ebqWK;`t|ChhO%>95G;k-n;%Bi2cSQS9bmhmwQ{icJ{Kx15K1UZe5dA}F!tcMX%ya^beqKWhDBqpb7p)a-|X~_SYkO zOv{n?n_AJ0c3{TXlu_`t_u^daM;9^_?Z03>^@-?T$YA?dphwz@VQqep)Z zpTt4*P1NwR-EaeX1#2rgfBI4z4J)w=-Pwmot~7{F{26@{f1m;WLj#mm@j$T}UBHp> zO*HOFT!#bb_#$@W{8DuMl8nN39>+3tz^VCD2|qvwoJESh7w$jVM!2>S{1p^PFNB$vts-K}NoCqh;fWM+UyNn)T5z$Osfdx1R-Dx%2UyCki z2{vF8I{uMp&pl4TL|No7_3}}Jub~0nMH7C6F5naNEu2Ajeil8kNi^}l=sfR}Vk*UX zSc|qVNAtBISCLEW@`bbk4V*<+{0uI}=c9c;y7GhJ;qVALegs{>NpxXj(LatR{02Sg zAEJH%E6Jb!jE-WSuvbupKDH(_U@MwO0oI?o2eokl1AguaQ3Xn<>IfVm5Kpjd}4U|)C; zje8i^;iu^Ma(3hVdFc429EGhsj^*fp4;JMU9zzFyj1K%3y~9a#+!eI_T3Ez!c;{v4 z9oM68rWwhd+L6DsnGfUaLT)4F4pA`Csc<3&Tts(J$b~tf4o%#GCTK+$(20xiQS_v? z;nbDjUDSthE&hncxvf6mzXCboTi@~6ENoOmQU&e%bH0$tE==(pr5x}%bYeBeqnaCNv0i>a?d zPi{@P9*vVl$3GYK9hh_A9t!#%7UOYr!bx<(m*`HukNPiIO#Lc4?mD`GGPdmzFU6?^ zp!3$F<2ObBQ|O8HH}XHp!W%Rc;M?fVhtL3{=)})Qc9xzkEWV?+r@NqDIwD5tF{{ei@&`|&Y diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.po b/sphinx/locale/ja/LC_MESSAGES/sphinx.po index 1e3b1e760..a0b473ff8 100644 --- a/sphinx/locale/ja/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.po @@ -630,10 +630,10 @@ msgstr "最終更新: %(last_updated)s" #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"このドキュメントは Sphinx " +"このドキュメントは Sphinx " "%(sphinx_version)s で生成しました。" #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.po b/sphinx/locale/ko/LC_MESSAGES/sphinx.po index 8c0dd3d83..5bee2ab75 100644 --- a/sphinx/locale/ko/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.po @@ -635,10 +635,10 @@ msgstr "최종 업데이트: %(last_updated)s" #: sphinx/themes/basic/layout.html:198 #, fuzzy, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"이 문서는 Sphinx%(sphinx_version)s로 " +"이 문서는 Sphinx%(sphinx_version)s로 " "제공됩니다." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.mo b/sphinx/locale/lt/LC_MESSAGES/sphinx.mo index 9efc6d773f6ae159554d41006c1eb9ef4a655aa9..d9444da49662a52ad5191a234ce526cce93e722f 100644 GIT binary patch delta 2251 zcmXZdeQ1?c9Ki9TdvQ*;xoNpgueE7+=7{woOHf+m?p@NBm1Nkk7Hj3DmsJB34IauQ z#wvo^Gz!5c1!`1I|Bz@!Q6Xlr4EIM1HSiyMF?(eMtM7OBz~%Xz=bYy`zu)qR{Pn@IUGCF#ryU+>Vz&d;njWvdI@m#$B73Xk275hu8@(Wmq zbcOnOzY-1Hf+pCCC3sg=k`LS&AAAxQGw=-7;_G+|9zj?B4=%%EvNOR(E+*81R(! zPoM$6MJxS%yuX0+h#&rl1BD!6w_rYc*qYD@ThPF*ScA94`yR9+kD@Evh90ix(DzQR4!V~gBL_W9pyL;@0jJP_X+8}DHKTto)*?gUb~NA? z3TGQ9NvjL z&=op-sXPj=rV59u3fnuBaWI=x+3I_Qn1I zbY-uh2_8fb*C-nB6#6w>M851$urzN?vgx z=t_>EmG~l#pGI~k{D`h_CKu;xKoh(UO*o5g=_afoe(0j%N}oUjzl^@P8(qmhv;s%t z_{r#Lv=V2~iT{rMv-w0kv{gt~s6!LZVi9gYE3gR@8xPPha1M*`DRkxAV*gIG0xzNo z?TP(|(6e(i_J4+KYZynjbP|hjPC7q-C3>i9(F&|g^FPUnSJPo4ZRqJ-kG|N2Ci2io ef9Y6Z;WZETc8_#bWXh*ouXa_WN5)e7Oa2FlQOPC% delta 2255 zcmXZdZ)lZO9KiA8^3FLo@6@((I&ZmoO{HW>YxH6=VS2Y&xhzy@ie+4ytU3B)iTb?B zMhvO+#b#ziIWkZ*CW1t05r~E0D2x2FUM%vBkjoS@q`qJ8fy?tb&pFR?e!ufO=h?2*vmgmf~)lg@gDw9>)}3!>RZePR0opUP73HRW!?{g;0*QI0Ngk z2wUQP4kvQ|Jo^5|X(72g@n$+I>FAC2p%Way2k}cJX7~}ya4g4p9>bOAGw zp->m^8_>YbXoAbJ1fQLr6asg~2Vce64D7^e+>guf1iJEnuntSe&IBLkVnWSm1)su6 z_#B#8XS{zoj`!ld^uHO$cPBKQcpqBwLuggMLo>V(9YrU+imvPiTEY~w890siU=_O3 zYIHn8Uo9AUSh5_IpN#i;v?8ydE8B)1uD8+m_Mm|W z@G@V?CvkiSh5W*H zF3vZACVU({TW679xLQs9Em;wDH(&+UVJ$Xc4h`IgOYkVp!!b0_WM-$TVHR4_N6`v4 zp^2@)7JLRxco6-%hR`iLF*|<$r|D><<7ae*Y0@;q3|fIF&_mXWuCxP9U^A}99q5E3 zXabjzU-+HN3M`saI74kn?x6#HzB{3@ki)SR{Y&?0CVu~DpbO~X`xAL2+(KWhe4x;u zK?7!yV-Xgk&*jj{W90dnYyR-qHELl5WH*#927vOzS# zqv+xK77h3d`Ze4@zU(lmwqQ+k2^yyr%l-a4V#fw_rFk@gUUWs<(8IM07vTr!O1?%b z@qHY>i0n@I16^S;7w21qCiobda2vX%otP$m*hIsXzJ>_3K{ zos+Tu46?1^61t^#Foo%CVg5?=P|rat(3s_ak`phb!$jKA)43XbaTA(I*YLZgBNK}s a+0yf3PtWlBbj#G(-n%}X9X?lcu;hRBnaKM9 diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.po b/sphinx/locale/lt/LC_MESSAGES/sphinx.po index b331d52ae..fdffdcad3 100644 --- a/sphinx/locale/lt/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.po @@ -628,10 +628,10 @@ msgstr "Paskutinis atnaujinimas %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Sukurta naudojant Sphinx " +"Sukurta naudojant Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.mo b/sphinx/locale/lv/LC_MESSAGES/sphinx.mo index e6e713a5aff63cf1dca976fba58bc52421893d9d..c173f6f5d9c364695cb266fa43677c00ff511f46 100644 GIT binary patch delta 2235 zcmXZde`u9e7{Kvk-qkjLZ8P1{&Doqw<`QLVD*eDjTW(2%5JEE+Y7|Bjtc{?2p(RD4 zC`MU=sgy*uX53s7B9-C{F~LwO(m#e3#GryfKL*kFyZgZ9e%^D=`<~}H&pGeC`Hq2( z<2NQ`Yg0;NQ&YMb*Gx;P6gzP?ZosA3i$yqq+?q~c37*9?A*F9|CYP7WQksIl;B*|t zo3OaN(4K@j+O_EO_2nrWpLh`+Gw5gu+tCTS@OFF-jrAr@#$(aW<0RT=qW==QfS-_0 z`Ze1Bpn-E0g#=5mn094FRtP+o4j*jAYP=t3;p4axUqDxW3hVI#n&2O3LOB{%upDo} zDm1aV(Qbq}Membv5xp@Wpr!_pG7Oti)>eV2|W}0qJ0!ia1dS5xoBTO6Z#q5vOi;d zB3aw62ATQOsiX%!dl;d(S+FB)JMF2I9m0%y_EUO`tpjFmVN<2ha#D>wsvdzSF! zd=KFq?27&jd2!M^v#3AMrhYnFaR_ViKU|D+m~9b0jNZ2cP51zsz$f8Jw4`6-eRu(_ zL@BHC{+Z}_6M87`!WL|=rv8>9qr;4Lqbod&?s-3&`DbXr?{FPnLnmzJRq^?IkepLH zw&51^Q1+vxKY`9SgsuK!BA-;0v0O_u4@o*LMFTy8Y+u@l2I>jD--%yCOTQPL=mT_~ zb2uM=M9v$(K!vTWM7Qt`^vo=acGkv)rFs<2bTfKG4;pwUdKUJefe)d9kD-a4#s)l( zzOKLHa;)HYdwlP)o_1HXccO9LM&6PveZ++m9Y?p|3pDUWG~iWq@2{g<^EY~55z(wz z6*^%HI?n@PC%X6R(b8{2pYKKAu2;tUvy@)v!Uy+-2hlx!9~&``R_J<+|AtODisX{U zkWZ?aS4eyXy7Dz>VjIzb-RQi};{xo%9P!h~T=?hnDVp&qbj6pWe*~?_U+BuMr&}-` zt+547{HUCpZ)X187A)M_-q((9Ex*3En_g_Al1r zWKNtbZo(X{KoeVyzCCNv1fD@FxgDJ^o6i|_qTO`(;Jau-@8zE^9n9tK+}yose|b$q RzGK>#Q^s5Q@|vT?{{vak$cg{} delta 2239 zcmXZdeQ1?c9Ki8oU9WEQ=A7nqZsyj!Nv$=qww1k+qna~I3HHyF)FKUH>xFFk$1}08 zL1k%WN)p`lhl#L_>stmgqFHH@lS){iAcO3m5eXw$Z{M%?z-6EF@;vAFJHK-t?QhGs z4UA1mo(dsM-V{O_+h&GPjB9WKuEi$o#;G`nJQ|K;5uU~{C4}=hm*z-m2pPPJvvC4% zz~Whjeg;$YtI_wfvqExx;RXh7W}q>;5?x>eR^#hvtWR(T9*q5?SVDg|j*p-lxP<(| z@3B9L22Ph15-h>#^yil)g}^lo_+m3w;&QCOXYo|Xv<;R-asCN$tHXaaAdcj0|>=O3dL>q7$%q3;bN zzwje}=HXZz{|AjXjq~QNB%!p>2n*4L>(I>Z#u~goj;}>C-xz%{`ZD_b8)yPOXku^0 z`Q2#1eQ2d~u|J5V#1ALq#98zRM$yYQfi9TlY8$u&=VMvy*P#_zithMf^!B%+@3o_W zJMde+lIP?6os`4zWmrS}&=Ln;h<2fs=thn!B2WUOF0`t>a3 zkL#_%g}5P(Z%00y@M#70=iSiHKqG#Sx1g&uz#^>2)#!6QXu|u^1O}of(UN|H58*kq z5;NG9&(A~W>(NWug!kaeO6qSZwliQxyU-ox&@=BxGe3p~{2ANvGP+AytRJBy9ng$u|p6eVoe65WO*9hRYi+L7Z6>(M}4qdU-r-$6_NA-d3E zbe%J}7%w6BEu^cf1nkaM0cK| zo*qFtTA{npvu#3;;)yukiN3c5O}HnH?~Lxk#K3!LxIivWXy&76f>+U< z{fpeQP|A&S#|@am7BsO|^y^uTCeVdeatpfNj>X(j7y5t!U+hB@I+)*Fd@Pl&@9Nyx V*|{fEmCd)#9LmIgK2w#O{y$&z%vAsY diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.po b/sphinx/locale/lv/LC_MESSAGES/sphinx.po index ec19bbeec..381aa4b56 100644 --- a/sphinx/locale/lv/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.po @@ -628,10 +628,10 @@ msgstr "Pēdējas izmaiņas %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Sagatavots izmantojot Sphinx " +"Sagatavots izmantojot Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo b/sphinx/locale/nb_NO/LC_MESSAGES/sphinx.mo index 4405e3e82902380fec885c56669d2d92a23c9c4e..88a5343951af85bc383e3b8a8dbb242e76b16770 100644 GIT binary patch delta 2251 zcmXZdZD`e19Ki8on{yA%%}w2Py4+JslG{pZ3Q?0XO_vImMH{lE-9)optd#}QA8SF) zH%4t5i7~_iQ>M-m%OZPI>5HM!-n76ld$GWZED477{q7#P+|PObo%8#j|GlSIe6r%$ zwJFK!5JF2?2nE=S#kd>i;s7qj6F3#eaXS8iMfe|vDU{1Ym`$;GMhK-?hn3ijH{pY^ zz8v$Zx1;krXM|*O;Vm@Gq9Gf716|;KtivHR)&;y7e~$I5SVH|qY%i|J9iR$n3iYvm zHyXGV-QY4T#B~)(E^tR2xE<%wu@kHDJ$wL9q9?zOjab0$+~7jK+)yi;!AEc!K8kLv zBi1*^{w&U<{iWEyJE7phd(o7Ch-5Q-jqdRK=oq@-74&3(qAAQ{H3OGo9?nEhnnL?) z&<)*&P1uZ%e>}D)8z>kkgM30aUp4qTy1*bB@MClXU!Zs4JM`ouXvW6S!2hE2ZXlmf z$a76$4cgv<##@R!iX^Pe6~Ytf!WneO&tg5k5ZedPo$rqxj2=eEA4fNE8r|5JvHv_8 z@FJS&A7gzS%ZVTUiXHh}VIM&ydfA%M1zXX;%Ww|1#d-$K$Tsw3FQb?1HFVw{G;lv| z<1IOWZmfiKI4^~H#1D-WJm~^-p|}0ZoGn~wh!It2k62>=myT90nWw# z(de(}qx>h<3pq{VgcJoAY(h2}?nMKwL;E*j18zqH_M^WOhoZ;Od7q>6E+R3)W#khk z`0@a=d8N$o?P&kmL9Rnsiw?{npRj{3FWI|j;Qi==pW?KdDJ zcy(NOIy$Zjm*8D!|5kL}EIMviLSZL`KD-sD-I7af8XdRTH!zDI0|Qp0DQiGaya>(EL$SXt`WX7! zZHWEdXy$q_jY(`jiUuBzeujw)o~7VPzCr6FXy6~v3BRBl`VD>0uc6~h_)#!$CHlHG zqL1KC^zN)g*XuwJ_7r*vpNZ|SHt?V1#9kU)a1R=IA3EV9H1Lt(w~8<1=ck{}ZW`_? S+f_PQdZ(+bX}GlJNWuS*Y{a1e delta 2255 zcmXZdeQ4EH7{Kvk&Z&Fp>eA`%)U9UIN~0UOgkE4$YQ-j%k%F5Hvr*=zj$~%^!D1!9;dLOvl&pE&I@|^Sh&bjxKMPDpB z{O_o2NlK|Hmr^Odh-J7PYjHQ;jvwO~9KoycJdVdv6Z}f49IGi-OiZZ~8}J$|;8l2U z)E8q3^%dy&j)^I|GVvN7Oy(G0fYSbPLs zSX&T< zhc4&_Y{UZEe_1@wR#GrfC-O<__?nJe(FqQq0Y5+&@D+L%j-xvtMl*H>4SWe5=li6X z%5W;yq0i@|@fIMjB1;bx3u!qzaVNUswRjyq9nW{8E8ia;3=g6G2hjx#p$j`2?cbsS zPobIqG3p~Yf%xgaXei|f`wAwbhpm84*o+2Vh&9*}^-eS+UFgo9K@Zmp=(yL>!2S3X zx8!YfVU?uAad{j~{M1Ono!*E})Dk|5W~2jo-Ki5j8=KM8zKSmN9dzOWbOA@u04JjT z`|uq4DlbI6jNN1o$Ww5_*~lW(U1*@CX!~kxz#cSUKYGpH4L?H1eTj}cg~Uj|A)j=a zFE=oiD`ke~pzVwE*(Xa)ZsPDx(9LBrxZ@dX_VHPJ|flj;;P4z42E!c@> zpdTG~0L|<#Xq*wW|K(cp?*wBx!t<~eIS%PTv|}goNt^icknKVP??)&69Ph`k(RW_S z)p6n~v|laG$9ZUb7dmeb+HY${;aLhh@OmttQA}+C?RY1;qgHgG51|u1jvmT2=o#67 zF1#1b*ba33hggqCaSHy7zPgLio|VwscUp}$G=>GdvVf?!q6=A$_HRRXuoiun8`1Hv zVLk3eVx%Fw6;Gqrud=@Q3px#%KTFLN9QZK0lXf(Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Lagd med Sphinx " +"Lagd med Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.mo b/sphinx/locale/ne/LC_MESSAGES/sphinx.mo index e37cbb51d7511b8af19993740b4bf0dd4a9eb13a..0e3576638f5ad91379563a1bedf459afc00076bb 100644 GIT binary patch delta 2251 zcmXZce`r;87{~Ev?r!RI?&@sn+||wI*0Oag*Q5#FmYZX4mKG>%Xcuc(I$Ih@k#OjT z#kiDFc6H7l_yh3=F>Qm2FhK~CVd91bb0Gd9#s0A743)}ye>@Ld?(6&GobU5|pYuH@ zo%}p``gTUJ!py4k%(C%A%)u1S#xyR%uQ3Zpa0>p36Y)Q^4BAn%0-8Bf&2q5>^D&O& zaH;o~VT67Q>i(CfTJT`u*BN+-fev>EYJqMn!5&ns%QzXYd;ca*qJQ7VbEbtGn1Kx0 zJnvVb0w+)j*5L$vaas@tZuJYdU=b7Bu@JlPIqXC2{0^34HrXk`1^g+Y1ge6~I38a@ zCD!Ww4L;w2(;469^QnM_7T%32`7xxLb{>`CpgW9O@CIsUqo@*QvYGw_>1)6b(J|qo{??qfY;?Sd6#ad|{<>i$1G->?`yN))@5Z?}fDL#HpTHVU98KGVwfHfrau=`! z2T>*d3)^uV+04NX)cv2L;+~69e+~S?KqHRlDrL3`m*7U6k0*Tm5-z6yJ8FSavRi?R zQ2{$qU(hrv!9#cw&!Q51tvFnFD{B5sKx01N$cva@V2p$C7%qI+>}gD*5=x^2^&sCM z`xkXcqov^otk|u_CdQlbDcpmt*pGEs&Te$p+L4?r*hxdDxCiwJzIU&np6MT`8w%*~ zqS!O21YbZcupJlRKGe>C!g?IUl{l;1Y%gv^a<;5T!Y^nAa;O7)p2m|*tjBEJh1yv+ zDzQ_j_xl@Ez;mcWdJT2oZB&9~6=6vmk({j!nX;7k`%o1bLRB>PQ6&&?BMk+v!Az{h z2-c$#S&k}s3%28C)b&HCx8S-vhDt1pa;(NeoQPYH<6`fk&e~qoy8T#0e7j0Rr}!=^ za1Hg<;YgqsY(-`KChEpc)T8J^e%8aE-t%D}A3+YjS!MX_V>p@aJE;3V@_rfvO&p=2 z5}!sb{4J`aKcjX!>f?7&rJeG4cwH6hy5(4fo3RNGBYUx%sLB<_!wOX568g=k*EAL9 yh>@&)#efnSLVf9e!#w;OmB6Il&Ya7UNad>?ukW7+8d delta 2255 zcmXZce`r;87{~Ev?mE45dAH?Er~8$2`J<^fYHI0X+N?1)hpRBuIY}I&>2^s)f;vH& zOt|<9a?PejXp)M`RS^_a68ghJRudEI7DxysB5pDz$=;vN1DE^y{y69RJm2Sh&)MDj zdF#ocj9{smRmIG*@H5QDBu>H}oQtP%B;LWXcpsyfk*hzmF*u%PPM+CQI0c`^IF7(t z@4tZ&`YTcQugSCE|ApUUpn!pdyA8EKAC}=MB&Pk0Ie5$a_izk-%MZtMP#c(tOj)`2 zt5AV!Pzf%<(fDS55C&f57ru{^nfM3`aUU+iv#6av!g3rWY1D$ZQ9Bz%m2f1hDR2xkaXf0Lg{b)w zR6^6S0^_Lbm-~3InuY?kAwTQluL!rI7Wf(!@Hi@gi>R}36}9tzRK?P$!2h7`)AOWh z**F19P~-DZ@fIPEBCz_fVeg<8ZbN0f9-qZcKHh`Me7}3hJ%+kIg-YN&DzQsG|062k z0IJfzdH)XP65k&9L>5O_kDvf`*y5-KYfyog;6!ZjejBPH8&Es@0Cl)NMcua>6?iWm z;Vn6cx~`6LD8XjTB)+xM&`#H)F4*SoLRDlR^0@6Q)T20qD(&~kn)a*D4|;zTS!%o( zmC#Gblr6?*aHaP*VxWm64L$S2sD-bfPXA3T#UZzVK`l^)N~F>It*FDb1r_)JYQ3{K z9S4vl>|ZR!36xoJ=TD;kx?vdux}e?t1gq%xVF?c4>o|mSZ~-Tdrme>s>_%1YDwg4O zREdYN10!Tpj0x2JJ5g~j7g2u={K7yTM!8CvHDfh);8Z;7JeOYZ=#;*AnJxfItsK9 zm0&Y!fsb(}9z^Z@2du>#*n~yTkvwida<}NT@C#ar9O}T9(TFp#4zsWa_4*w^C3XV! zexFAL{0?Gifl;dqI#wcz=j*A7Tv$h|#?lqiDeEXe-PVr+@;A-lt zoh(KzxEhu5M%0Z-)T8J_ewN}-@A)4-eiu3T7O4!MeHrG^{}6TmcJKFMpowp2sKlpH z3tvE$^e5C#ANcrVRB7{Ph1bnPUDt>&Vgl>&FtQiBkE&ep?63lHtft?DdQErC=7^E3 vonkkT4EWw-rmy^t4MX1bm#sDuJ78t diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.po b/sphinx/locale/ne/LC_MESSAGES/sphinx.po index 9dc24c83a..3ded0ab09 100644 --- a/sphinx/locale/ne/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.po @@ -628,7 +628,7 @@ msgstr "यो भन्दा अगाडी %(last_updated)s मा अपड #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.mo b/sphinx/locale/nl/LC_MESSAGES/sphinx.mo index 05ee5662b68b808aecb4080cc1564d25879b01f8..4b43d500a655ae259fe4c95332b9ffa7c5c6f0e9 100644 GIT binary patch delta 2162 zcmXZdUuc$99Ki82+jK5BXU?{{E&t?R3pXl;Tb5W#H6xrD%PhPoR^7Ci+A6T-qh`2h zqFG3dv5FKDMV2Ed6BH^jnBavM)l41q2Xt3~7YgR#kgZE8b(Ezv9lypB{1$8Q2W-KsScH|cQ=*yba3(fjDoCjr@1)sMo>D2c;auE| z({M}lU&liFd(r3n%2PHK_z(m07#Ijoq5;n1BD{>|n#5UHHYeY&!Q1ICL&sat1w4j) z()#GXh$iktC%6@hF`JX+6ZgiAgILRjqc|VW;Tjx6SH9#9{;&y6xCyP?%Qyo&(Ft`& ze`j3p#R|sv$MwT#yrGPSr9Oi!E{&oy8xL=y0Vk0;q!P+v>1xr$IlK)U(G@;`PNW%g zxC*Bx7~`F2{BCqYSr3gm8VAw9LujH?XyOrc?|(s8dhH#Mh&L z3$5@p4w~b0v4;Fzy@)qJbyT`>J@@AD{)e z0-MnaY(a{XcA@uuihR=Ne7OauYp8!4jdO9sJdU;(YS9Ead>9`^_xc^QQoGRm4qyR$ z-j7ybfG@9~LKpHg`U`jkDP9^w<4mAGRR3i(JRBv|k#m#Ekwv8(8elap#f@m`cA#fq z5DjU?$N90irz&74TOi$l^jP8*BLbN z1vK!l=r7L`cn|uT+!y_)!l%)RK8Ggk mKr8S@jBg*FS+b+Bu<@m?j^TY}FO*KTKH6878?LVHn(;po!@=$V delta 2166 zcmXZcYiO2b7{Kv+xsyxhRTIrNxeTdob{dfz72^Ehl64^12m7?Qv_?_*C#B3wmt-Ys7C+)cEQX0d+z&rp6j~q>%QN2pkq(R z*ynlK=9E%TX-b7SfhG73*5Ieuj8j;ERZCLhGOfUc*n}xBr53z|%hs}#7Goz~jQ8RN zxFg07V?N_S^!8Yl4`9iB%6+74<+i_q3BM-yLx3-D@mh3nBmTCf4z zaIV0Z??vPHp#^0b7qwjMM+1+eiQYpKe~Iq>kLZd|qaFGaO;|z{-&=wPtm3N@n_|8L zO}GVZeRp_25;seITv+krxC#g6Z=_MQ^4G&-;k)SbAE5=DKnwdS?*D`)JcG9Qj~M@h zb~vAd=KNBuA%Cjp!o$>tChWv2yfelRqMdjIUFiV2l6`0ahtPzFafn~TYiL0?TsrS< zXa~E{1>TLu$*`FGX)qpm9@*}65Z!{KNYUwiwBm2kz*A@e(`aG;qAM$=?=GYY9XG~! z1N!{!=%L<*Zuw5kOfNA5a~(Vhh@V z9Y}N1ljw6VA)j=FFSp=$4gK%rVlp16;%IwgC7NIjUXQn;d;J93si)BA_G2DP6+JqFBwxJ#9!<+Fr^l*KR^>`Xh zT(EN9ax_70j916_8npGTXyP_B&sL;US-Ou4_b7+1=xH?2Ncbwck}>pfeT*jl1`T`? z{RcdYzIP7o&|i2Z{)ax-ST{ev4n0#hVuio|b}l^ici~)1(1e5NDL#Y-7()ZUg>KO& z=w6;e-#d%GH;o>~JbvsZszeK`Ll@8(He&(#(?%`~a0jl&t=_=L(8RmLJ>j!xzyoN4 zVRVm2iMuR?z&>tnn*>_Q8@2Tiyg?ZBfk jziVP)$*%murU!C8x!emgH4PJQmTp)aSphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Aangemaakt met Sphinx " +"Aangemaakt met Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.mo b/sphinx/locale/pl/LC_MESSAGES/sphinx.mo index bdceda4362a59aa405fe65db16205e0e34465fb9..505c59e1c781116b4370e0fbf96c855f9939fef2 100644 GIT binary patch delta 2215 zcmXZcZ)lZO9Ki82z3QCVbvjqs+~zh%YKBdm;+7NTB2DKqD-BEVPhi{^B9i}-9#$wc zOjS$q_?;aq$dN8kWHi05!LUcpcl!tYp4b7))$W9=#pVFIRc z7}mz;dQ9;=AAP^2G$i?jpQd9X9qrLq&;?${DR>aw>o`7u{qgyG9K-YF*gu3O@E7t4 z!^Rh$%g~Lh&;aYO7#qeXg^ioy#1&Yvyue$~iPBw<>i5$2)`XVA!&Vhyg0{oByUcSqlfcB1pU&;Yv8z&?!Q zpQ0O{Kr8)ud>+7Y>>qxN1J}_b_yfIcX|A*jR-qf$;UhQ$%`k&rrgn7R%jibyv5#Lx z7O8%CjP%{O8J)KjP3##gX8*9&2JS{Hum^o{9~wvxa^FG@UFd5x!$Hj7e)QH4#qmF* zDWdf*O~CxEN8f8ekER6^f(*~m&@8&an^=uq=mICujn1H%pGD_ijN`Y_UrP~RG(!cN zKqGpWT9KH-CNzK!G@%2NsJ{ar(b0&fu?p{C6P9uw+J?3GHu~acXdqu<{*MX01Lv>_ zFQDUP+)NXyL@P8CIo&W1XW{Y+>Tg5|9WJ~d&8!Dq@Fe;N^aZ-$Ra}Kb==?>bXJwv8 z6Iq8XxC^~Ar_oaPqeuJ`PUmi1!AhP>64EuoX=v%@p)WogpI<~b*c$tt@AzIc(07nn z!eKO^eyqpyXr}+7M_5{2xJxzYdJX8l$pRW?)`m`8gqJf`9E#65 zv_hxQBl-oK@jkjvGlO-w46V=>v?85Ig_F=zXoREaQRL7J`=V#i7YE|_HS}`bMyeQ6 z{FcnT2EFBTqKnalR-o&yM-$kL9_>yn@%P_B!{6opIM9W@(2dja2wH)`IR0yVzJU+X ze+P*rj3#{-o`L>j&PD^vpp{&WuDcdJ`z)r|KXlSCvV-WEb)$D7hhCa*(S?6N7rcaK zb_=c4e`u*kP-ja$kuNu#k11S;&dWrXq3f;0#EENYSkiTI!fTlSLqZqc6Z_vo=e>_! zo@3}``!e?5#1zl}pc~#tFXzaqg`Zz78u$}999yO`%}5sazFIPvO3mE3c|-5Q^o6m7 KR^{X;i~k3{VaPcE delta 2219 zcmXxkZD`e19Ki9T_cpiH)T_C4K5gc1vQR6`hnzDty37){LQ|{+ZHCcU5Ry{vUoEjT zhq8)9B*k7t5+-*+FLX#Ye33n0dK3Ad}*PsDru@t8bONtxMi4z~kF$_G7RroT_$M?{ae~%OKXEeYHz6_`a&EOOq zg!iL?&56&Aal9FCr+---Z%t^p@CG#HZz5R?AEFU{7VSY7Jcgd^6q>>-=*GWc3jah; z`cEA1M*}Kj*DPkx`7_b}WG)Ri$|0Z7#MfACK{x0?H{6B>@Bvy2`_YphL^IZdZhRhn z?*j4(*Z3NV{jq-}_w0TXkgG_--Ni!BU^+Ma7pZ6k4D}e-4uNro!^B9unP@r zPaOXQ-LMigpO zU(phxwU$O;q3Y51rlD6e4-*%i~#TU&m z4n4q3w3Z%4VhYcp0d$}T+FnKe9oR?5bUcLP@eiDh!?_P#jCbNz^u+^cAYWkNj|r`T zlQm(urg^3HyqTuphmOJeq+c(PQX~-^B5s(Bis* zWHFTTTk_;tw902ibLfGVpzE$d5AY&-wHvYA-~T2W{w}x2fp^gtc4HlWjAr0;9KRT! zf5AKGzlp>WDmcCiPeuPRXP|*KqM3XWU3V3F_idPF|IkUp$hy!w+l|&j9xa-$(S^^T z3;uwf>~}O%1Ie$cE<;m2iZ3^8z%)LD&TEV|q3bSphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Utworzone przy pomocy Sphinx'a " +"Utworzone przy pomocy Sphinx'a " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo index 3016d5ef7145702f129ad834c2d65e92dd461cd1..824ba0482432c49f0d5645b1368d2e666e74c8f3 100644 GIT binary patch delta 2212 zcmXZbZD^KN7{KvsYwBj{-f~Ob+SWGBts$i8G_ab~uqDxA6qyK9ie8sdK~gqTd)dSaT#`D8$N@sJc|u@8Vzs~4QLk4U?GhQuow-j zGS%zR@6C8E-kiR-XDB%E{bo%jp%zaiv_ zZ+KmY=TrM-biRL)tziGzc=x0n9k>pSY$e`+t5bU?8u^3C9mz+~{!gI+JdXypCw+ed zo$zfm(|xHvfF;ZyC(?&g=ob8d9=0iTz*%%+kN8qpfUd9(4ZIocw*j4K6Q1B!w4;H{ zRL*6tfHb(k5_Dk|Sjhab!2-6W4jt$jxDVN`=tcv20UdB3I`Kiwoe8x6F|^-T=$3t- z>Jw=HX>`2*kl3P()nx3rih><(MI+mS9O!rwoiKymj( z`Vy`Xi;uPF`1hdSA40En&oc7Aj>3K#YVcd!h?j5^)-#)js~e3tgRb~JbPGN}_kIvJ z_ndE;*~qiXzKT%E7^+< z+>68#AEJAD8k=w&9WSqTZiQ9J)yXz=oGvtzne7xz#baosFQF6nq5~g5&%glkM3$F7 zj$tECpnEx=*A~1H9p_nWz}JvP$H%FC6b;~)IWzGq1yAi{`Y?lT!4-5RMVv?jX+Za| z75NnRqJi&51AINXKY1Aa?`W!zpbPsh`4bj-|Hmnq;tBMAPGJlFjSgH>KeyL6p@H6l z2689X;=}3t%jnAYq5b;Mv+@yoTaKfFpF#uq9dq}8l7gpo8o5C+pS+oYTJ(@Lp(|OF zY)4bL4Lw9Vkyv9lx`21liTlxhN0OhQB9wdC4Z*+4BF2PH;{7V ziIu#}#8#Y#yU@TNNB8_WG=KwW2Kuo82hn~f8zZ}I;c!7g%dVcC2TQA0WZR0*Ey~rh JrPap^{|DBP$&CO2 delta 2216 zcmXZcZD^KN7{Kw%y}7NP+}3QHx|(gX7o8P}Ggo37##k?eR;&UO2iXUm29{BDHwe_A zmm!K;81w>Wwpn9IXs?Ph`(lA1+lMSIXf}djA4(Se|9cKR+`n_~``qVT*LBYQ9O?L~ z3Mrb!-*e8OWuW4EnY?=>`m@PCwvdhtRF4mH|WIQVcHaD-^2d^ElIzg%-Dm*Mp@F@a zo^MANd=stop48uu6|5hhqzB)kTkr#V*v8NaC(wlpIO26!hGy7^2Ht{>YeN@Wiv4^Q z?PwtX)Z{ByLK#f33QepQOIbhKY~VdyJSqE~UV*|Qi5Bhbyj#g+7`rcsb58<`+&m-F! z1$;X8Ymnq)Av*s9=<_Gg&wA4g>c5c24sKkBr*JWj;u36TH4j%88gUPr@osbr-beSo z50~R-XeIweb}b5d+2?iW`?GNoEiHh;VazW7jJWM;?Gn6Sn8j{`?x=fo`qIE z5f@s5tQGg-3S5hxg#+lk{pi*V;R4RYSv1ic7c0_|(IDAq!vcH+`9&ueCwd+&{Yz*j z+tG=8kyzqGbWcy<%{YwCSKN@#upxPSas@h1CtAsD4Gl}N9w+~J(1m-^iFcuA-~jTA z!(4pvEH>i>bT7-fwBtNGk+Bw_ZE6qK0?2iPtm}Sqk;U6li&YE8lKim$QKml)XfSsp@(cf znn`Q211;fd^bkFT#2TB?1a_kf??cCZko*{(Z!q~KW|nY>hA#}K2fv`1jHdo&bX*Y| zZXh+tFXnQw5)WZ9u0sRgfbRJgG=N=b1@>VP9zw?rHpjr@9p^1sXvgb?<@Tu-ayMx diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po index b41b5ad18..bb4837662 100644 --- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po @@ -628,10 +628,10 @@ msgstr "Última atualização em %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Criado com Sphinx " +"Criado com Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo index 7410fae9a4a18f67b027ae0512cd772dc9937c2f..04fcf36f8797c9918e6fefe01900cd3163581a0e 100644 GIT binary patch delta 2186 zcmXZcc}SI67{~F)yk=>p-ge8b%jmSISIsoqyYDF28S zh%nlWmSG~AsJIaoO~b^rGA*K){oVJ##m_nCJ@0v*^PKbAQMb45 z^dAXcwV8zmn)Suin1VmxNc6A@_hS-1Kz{ZYfBNI!>Li%`i$iI?O*c!!lnk>$I2`+6 zk?V&sKz}ys{jW02i!b~&149_7cdkJ#uo-i453;sh!~uBA^*devB`WcEn2DcVKa-9E zjzT4ti~TT+iZ?0K^Ix3Hz$gY9FbjXg2<}8}@*yhlGgPIzFd4fs6+gRvYS4c^2nREs zg?b)FtuqBx*(j2uE%#_BqZVf?>V+-Hn%0gg)iG4yGnk0yQ9HYYO5}Ge#G4pT5VcOX zd!9%+)lWsuABKwSg=i?#F_?|hPyrXB68IMNVhidHY(iCH3#wwfQHjJ*@0~}jcLj%I zryK7=1^kFQibN)%XPGp#a0r!I0p?+`8=r^TQJr&YW^zx0ykg@9!5_K-=m=ty}%s&54FHhqHBQ?)J|t2#jq%j$8S*cwxSk1isSG; z>b)N1XX$)WWjGe2xDZ45a~9{XQeIbgsZeLtfI8dna3!{&<~>Dzmc&iu zqFXL%yaMN7Jr-dH>i@_s)COLoE_*^Y^G(L~j}T4V`Zf=aX%^$%;8M?+_N5UcPSPQ+d;zzWJB7obYp ziYn;|=T%gI$EZrZM$PX*Z6u#^Xvecr{d!d3b*PPan`kJbvlzzfSd85`9}BoKWquiTOYiy*>@h0PC#1TT zQRshuVbp?^sLyB?a-0^$Ik*D3M)r#vzmD8zdyZPK2Nf?!*+&rH@@eQcPs18qiTWBY zpw8?Dsv<8?fd`NAcOJqS^ouZnt59FbT4buNN3DAl75FY{-RG#!_N^qoC5-h;myRlB z9?rz+n1mko!#3=TJ5Z%>cOF5N{uCc0MLLS!YL4?KxoR2z! zHq?&VQGxa$RkLHL1n!_d+efJPpQ6sT%RLXq`ln0|1d5k6FWuFcT^MT~*qEGBR$N+< XQ&u*)yeif?WMgvtX{<5(x3vEORJ+j$ delta 2190 zcmXZce@K;A9LMqRHLuq!OS@|7vb?%o%gXMxRVHk1VhuuSjv1xZSc__Gw<|<3x9FjA zNyG+Qe>exWv6U;vsJKKCv&M?CQVOyH=}#B522o)~KcKxo_c?I!bHffmjd1@Gn+NVEDMvEgFEpR+=EN74}*9U`Pps$OvHQY1kA>;i00#|X1O>y&n%3k zn1MB}AID7k%TVvH$TKg!@cRrDGSKGiKrOHzBltbCw*8Kiame*YT>oEG;^UZ)0sg2T zMg^RSN~{vIF^-B?pYQn--(_G11MOIfpJ5{<&OED)1dtr5<4jpW-A8O!ND>sON=P zfHP3fcvjf9rzMeiG!$$eTPcqH0r%`sP!&k zF^;(LN2q`=P)8AD5_%Sg7r62FP&-=V{J^;xH9vt$UuN-SVI=~AK2svUK63^e0?`S8x$#u>IGt&ba|q z+AdT{PdG250*s<6^#Ju=fHG(!Rj3`mMuvF)8fXrBky_EPeYmiiMpl3{sS9D1$v28 z*9xNk=eH2GU_I(HT812_t;8n$1i40b(v1%y_u1~E)(cQ>#Vf)R;#(CB-R8G(6(&$$ z!vN~chENr`hYDOg+uwO5Hqeh@CU&5{k{!rY^HA&lf(ks0>8}j+**=lPx8NMVbYWB} zqxcp!Vi5OXHXgt%{1#REUS~h5^eI%rf4T90P&<8y3Y<~xCz6l48&Pc4gXJ_9Vk_zh z4xo0_iwblYsh<6cO5i%`vmHUbe+PB8WA1rTYGO`(W>!r{@}p$(P+M6vm6)<2loOj@ YTUQ=mS|6)T-7MS_a?ew3WfyY)2Q1>w$^ZZW diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.po b/sphinx/locale/ru/LC_MESSAGES/sphinx.po index c954178ca..2e10a31f6 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po @@ -643,10 +643,10 @@ msgstr "Обновлено: %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Создано с помощью Sphinx " +"Создано с помощью Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/sk/LC_MESSAGES/sphinx.mo b/sphinx/locale/sk/LC_MESSAGES/sphinx.mo index db5f222dd1147581c5ab867374696163cb2844b3..375159dc2c7519011b78fa6d66d19117741b2b31 100644 GIT binary patch delta 2106 zcmXZcUue~37{Kv&o#Syjool(7TT?ro4p?eV*bHZhl?KwHk`a{i#>mQxjJil!{<`r( z=ns*mB`FrMih|8)!>$|^*b=&sTC5tBV;KxcKhqO3dGm`A2BspW*d5 z6!UXv!ZEb4^H_~jXuhj;S>?q#-nxl}W^BSc@gCfaZt^WG;Rk2|!)V7wa3+pn4Nk=T zQarzk^I5N|uRL!=;}y{kw`L3|CUv5fZ4I}h0e2!XQV-hl*U-d=Fo#Fc9lnni@*$S7 z52p)^^)WR51X|D^*n(M}J{!1*CR&Cjz8gLBP3VpvLOaxrCftp_m!Sdo;f;7C)(6pq zLul)V!ynMN6G*{Xnq*L9;YvJMKr}0F2}|Ma=nhw*1*|~}TNlqCKof38Tf8OaJJ1fl z5bJx<*6+u8d&>j4V{_Yx%bL(^5APcy_)%W>d=xxs}sBEZ! z7PK^6h3>oq*=t&l_2f@o47`m`p_T7J1HT%+gWm35bSKBrui=ZBpF`gpN8h`Qo~`HM zku5@wJ9VJHdk~jkH+uil9tNKI8|aSTMejl{+Nx7%#oyr~{2l#Ds%euuzXgrcinro@ z*pAQOVmyW`aR`lf3EgmQ6a6<~iD;hf3S5KjXu{{v=X=otUq@d&jIG#@cH}&|vny!J zb7Ub$nuCvE8SU6Ew3GXgCZ+w&^#3*npRnNBjG%#jMiWosY5W`A`5^r?;rD2Q-_SF! zqTlW`kKU0ITJTadZW~&7NBA&ujnejvfi3Hah4;_|gJ>aVVm^XaegSRu<#=A8Dhq8u zf4>;*zzQ_s>UiFX{v~}Bc{S}q|G;Gj8Thw*6iYZ2^G3Ggkt`3}(3ahWekEOK;w@+= zo{Z-&BiADxiuHc9uy4@ckA~xw^(9S!?t8DrNftQ-s&io%7lfQ2O delta 2110 zcmXZcZD^KN7{Kwf>7Knb=hMpNHkVt?2QidQrQDj74J|0Nq7kELQXe8q78OOHyB7q0 zh~5y&n$n9{n0+wUOc_M9B!aO%ghU!PA>|<>mah;-{r`I|82g=<`##rou5<2ZZ2i&o z2fr)JHl>tK&r2zXopmYI;2LbkUc3zlumayj{?Z=)RpaM&%2GOv4K%-+pAt)@DZCDU z#d4g9{so*%zcOEXzc!z;*@YVzSir=ha3#9HJ=lhiBJZXlti?B?KN9@|XyQlkTAYaf zaWvpGn%Ehv!V74;tNE<-Vm)syVxR?^up95fK6I12upK`|6PQFR_6t_xG+u+n=wFQa zt9U)*bLva;3(@u3(F(81Xpl_Wgl4umd_SVn4*g2{(ZHM0 zN^FVwSCQ+HcE|V_n%Ix%^QXdMX*^5kX;`AN*3yHOXn+Rv7p?^@X&bsg0Zq6AeeQ0w zG8@sI_oJnK9NqCt==gi+o%$H9%wf#={ZG>Hv-t@*&NPh%{1**a&MGcgi|(uqU9cOi zP%ruw+#B|z8+sBw%B@(yp%~v69>5&&(-$#t!~yzWqXCYg3rxlMZ)iei(UQ)@{D0^X zMMDy3kucfNp3IP51@ml+!j`;J^qCzxTap$;U>2sP37YTk-7R6N7`J)pZ-@ QMSEv;U19X)=AO#`0V;;U5&!@I diff --git a/sphinx/locale/sk/LC_MESSAGES/sphinx.po b/sphinx/locale/sk/LC_MESSAGES/sphinx.po index 77f120232..fdc5e1371 100644 --- a/sphinx/locale/sk/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/sk/LC_MESSAGES/sphinx.po @@ -635,10 +635,10 @@ msgstr "Aktualizované dňa %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Vytvorené pomocou Sphinx " +"Vytvorené pomocou Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.mo b/sphinx/locale/sl/LC_MESSAGES/sphinx.mo index 79f7f4eb39dff44c5b9cc521109723b9c378ac7c..a4fe3d63ad8965800719d0524a0b32a7b2bb71dd 100644 GIT binary patch delta 2146 zcmXZde`u9e7{KvkZr*KebIVn_<=kvDu`Ua0{wM}pWeZzi4N@|VnZ#sCQIQL>x1yGR zq!x>eMUZ461?$HRBEvt%pkG)NArxu9z!0%k5KLRGzTbNvxVxWo&ilUSdCqgrdskTd z_S$!j&dF{`DJ`!}X&yd|Rk#bAa5t{PgIJEokx%-CuS)#W&YYBH@FJT3%ulHX7u4~G zt#}@GMt?Py(eFc_zqKx9#fdjDa3KQ&;ZAgdJ=lr|kh#+&R^vC(|0()^po#yB^;p4| z{YErkJDS)EtiaW1yq@~3bmImFE@5CRHe!a?;TXEe6WE4l&;;r)C{?T(bM)Kse9T9G zOzmQ}wxbmu&S;QydI8Ps^>7@W@B<`fnnX)>4Be_9aW4LfuJAOP$P_Na zY4pBk%2-Sgoj;Ezv=SF%b~6np-i`)(5Dok^y64ZME8dS*=pY(!0)6gdbi%K2A)bu! zSu|h;7cG5#xCEUyk0h3*t7t4`;M%yb1Dv<`i4Bktub*o@wHhF8JF z&Z5`LFD@;x3Vl8wuEKKSryd$qEA^tMd=s*LX(;-Sp%d;6Uq(;&Atd)yK%e^*-NJ9t z3Y+-;Qx~!q3n{bOQOL8NRGc z1Lbo8OVKmaiPz(8cm=+QSK{O%>TgDWF<_>3%jPCWNcnw~TPJ9o#(udH!ehLk| z2Rrc%bY;hp-AKQo_su0p3s$2)RC!#7H#AXy1MOqLmF`EXl@8!#_#t{Genu;GD*Dqn zMSm8_J^juyO{9Wy_jyh_MxSF6HVXy zn@fjnA-Yv<=-zjr_w}F&tVb)d0bS@ITABON1!p5PT)}f#42)g$kDwFHU>jB~DQ!Uq zI^Kl_=tEc3kDm5BV|)Njd@!!>LK7T8EA=3#qhtUZ>M-S!K$S3{4mjVAn z1D3UxCagubt{r`@8x7ct9@_Qc7Igl5!$+}|_~}_1p8E0deRQJ3(VvL^C*haqRvnA} zDKy{|TCua}d^vtry{`rxZ$V$j4m6QI>?-aV4Fe9Kr*|;=kE2`jO!P<5!!(Be^LeXq euCl+ZEWho(yGM64Eh`MyPE{9sg&j>d=Kcp&55DgJ delta 2150 zcmXZde`u9e7{Kx4bnb`S)osnRt#(&ew?MtYu-RgN*)?xu$a1^`oFjnF@uV^KAAF2~RtBEITW}w)#R+tg=P`#D(FB?r%N5IF75xrefcfa( z8~6M0CdMC#`&-cYcAyo0u|R{Q)7xlfpN5m@gx?}DQxPrM&*)bDhI8>RbcNGsBLCoW zoJF6@QpQq(==^y!p*46b79OJE#5>SH&!K@|L-%|fUGaNpg$|?Xy)6)o#AeDB`=`~yn-h7dfY#V2An`kd?@-~ zqZK|DJCp?KBqVvcvUE^Y9 z7E?YKkVDT*H}>HmuE2NkE-Wsk{$}(q17_OD>>iFbbg!3T53WQfeimKn^XOjhM+1-H zYWxgc**Ro4(k1k{N`hoDgZ`n);|9FHh58$4oB>z*K2oi82s`i?dM5tBQc0tK1urpP z!ScvGT}BhBqa41!41KRR`st2)uW??RvJM-v!CEAj-o&|$PPyU_&~MrpW$x3Cl#d+DD*C%S<-%(RuapbH(p z4-GJYu4of_+PB8|HZ<|!xW5lga1^c71X6)QI!eROrWpQ&W_T72G!s^2%K;n0C1}7l zbR{|L#8qfwo6r?Mg(kQit@H>|#Izr){Qf_oVP;>TdvY9|;1qf&&mg~afr|m>wwD7| zqZ2lwTX!e=-a0hkgXp0h44+2l-xcn~cH*Z4G(7cRh2NkP9glu7`X|HF=vMs_{b@Ad z3|g_P=zI(Kv+8pV=y(qO9J|m&2C%oZXEY4B4L!ZX(SH@)nm3~V4tkhAMF065nVPNH dIB)){T_ZyyBU1yJ=K5%l4`h~4jkRQ}{s(PqzIp%v diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.po b/sphinx/locale/sl/LC_MESSAGES/sphinx.po index 6f6e49aca..297d1cdba 100644 --- a/sphinx/locale/sl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.po @@ -630,10 +630,10 @@ msgstr "Zadnjič posodobljeno %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Narejeno s Sphinx " +"Narejeno s Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/sphinx.pot b/sphinx/locale/sphinx.pot index 9ddde4c26..b1d816f72 100644 --- a/sphinx/locale/sphinx.pot +++ b/sphinx/locale/sphinx.pot @@ -628,7 +628,7 @@ msgstr "" #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.mo b/sphinx/locale/sv/LC_MESSAGES/sphinx.mo index 11b18023b925715f88923b3e41e93d6463617884..40280d85d7add3ef1fc20f0e6b0dc7126cc513f3 100644 GIT binary patch delta 2243 zcmXZdYe?Qz9Ki8ono~=sTbZ|3I<<|pjhL0zG`2`FS#zyu?1fP7A_IvGnq#!5TG6@< z+U-R_8>8q&4J?)QMkB_$kS|)J7Zx~+jB2tCqQGLT@7L!C56|a+&j0zJ-{qXYe$g@3 zF*KW#*^pAISeQ~i?!Y4K$7&qJd+`Wfj}use-(w;Ej43Cji&)O(Y-vixm|K?8Vl2b! zup!3FFpu$C^!asVDKo!t7ZW!#u_@e%F7Q0o;@fDfVZ0H~#P~bBf$?GD(H732fiGh&{)1NfZ`{9z zCR9k&Ml3^r-;B;@9^k@29mpqj^K~n3M+59f1HOeOa2!1gAEA|hf_7{i4g3@O+%)n@ zfAUp<*J8eceKuYlvK5)MB72cq(1knD%r;;hJ|6RfXy*IESHd^Z-ycR3co$9VMBG1x z1{^^t754_Bd`Xhya#wV`L?(HQrl3GPNKeH9IS1U>yHkS6xYZ64m7}XXu>a|d;CV+KY93eCVPFD{RrKG?)-XX1=^?xad+;_qipy{mm*W(&Mk-*Re69{{aTA(wE4n3J z*p5%c{r8aWrw`GyGLFXkvYP(i$HfIEtfY#gY|B=o3ACY=_8>n=eKCF+A7*?I-Rnv8 zj7*^&m_ZAs&(dYIV;RfzMoCzScA_5LqZYIS?Pv?TW4se>;WOy- zuOpvylrK9qicNS9O(_5N>|f4GbnDuXbu+1(3oF_hK83bu7rOAXXyyCRh4!QOkD&=3 zM-%xNeOu0=_b0<&&`K|&1Cv zvIYI!X0)K*un#?i{b-^G(AV_f(zIm0#qTiTLMJg7htR+y!+VO(0C5 QeG5B_=SRb*Yl;^94|-0Mzn&9@oa2E z1M7(Ptufw*bLhV(#`76BPW&WV^5>B%rk!Yn`@&Il!Z9?n3ABX2pbP(w#rQXx>Ax{v z#A*gK6PvLbeZD>Vvm3Z^p>E_#ckok>gXjX!p$oo*2JjAg7T!lQA3-ZNiY|N@eQy%E z(g}WQu!#M&zZPAu3E7G)Eh^lkYtf0j(TIC-0j`Mt4QS-ggqy>y==0mr0Nz9c+Y#ft z(FOOSmHsT+<5RY>%s9wtiW`znm89py&FF-!*oZep{~C0GC(wYOMfdo{7~g>;l|Bf+ zMCYGGzotK``E2HRoU(BQa?cDrGhnduIlr7m+XaJpPrUS?$>HcVM!rN%SjMJwc zJtLE71&*VM6!9tfSzd!y;yN_oUfhCrW!#wABwE^8^9z~HMPFQqzPJcos1wcLX7r5o zpj+36SKwOo`C)YHb|FPeU!n6KL(kG5XvMM;(sZCItVb)6L-%MYT7l(g3Hzh{09wMw z(D%0@S9+ZvEA=s6jT2}{u{V)fo3$*%flsTU>!&jsSDlX!RTLy zF0>w}&;YxHb zSD_QHM-zAoTX0kK??nUuB-#hVG0e>H>v-T0y6_LtK8Xf&2K~D*g_gXWljRwyMKfzb zKg*@)b1Tq<2Ezx@L-+_9=nLp)`buM(KV9Ot=y0N)Sd1T{3-2EpDmz$Gdga6U`||mb U&We0_+;8iwXdd~l?x)iK0U1fi!2kdN diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.po b/sphinx/locale/sv/LC_MESSAGES/sphinx.po index 9967bdd74..6d0ed166e 100644 --- a/sphinx/locale/sv/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.po @@ -625,10 +625,10 @@ msgstr "Senast uppdaterad %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Skapad med Sphinx " +"Skapad med Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.mo b/sphinx/locale/tr/LC_MESSAGES/sphinx.mo index 812b7cd941ba4757526fc09fe6aa702c50ad5942..2bf9e7a3351ac2d61deedf9de38d6ba7ad90c70b 100644 GIT binary patch delta 2251 zcmXZdZD^KN7{KwP&$G8D-JG*FU#8oflWH}HT9oKS=U{9>7%FJyOD@x5Lxb`|aEmD< z7N{|6O|)1Aso={r5Op8QgwinECu?5@ZG}X$lp?j&|G($J!+z)GzRz`?>zrHvYWcI} z#O-m(Ga-cfq7ZU%CuVRDPR9fIB%Z&H`XE#ua427!L ze;f_mfF{_8`M7j)k`25nKDY&EF!3f%!!BHer_r7Njn$Y-b|&~Re@v(WtzawW;d5wW zt73m+obSLXjK3b|_aro2_ce=mH<30gs{yTtM%_H|Wl+`l8gC(T6iH~#Ho^*Y;WjkmSFj3Si{l5-%nwF;qDRo@PofE&MHB0b^Ow

7Zf2?dT6{xF2hBcjip$F^RN}yqw~k{K|GHnn1o>(E_4@7pn$rWKp8q-f!_K@(F7Kvx4IF1 zenp&r39aC^*x!!^{3LoZj`yJ(`yTWC{)cH8Xap_gzpXEnK@h$7r4Mc4t|FQ=*Kh;qL*{HcX#GmI{nCo Xju(5^7S$AvwccA>RNZ@`yea>G;p@%? delta 2255 zcmXZdduWzb9Ki9j+&j1V?(QsiY31IHR9dY+W+0@q8q>G5KPtO;i*Q3tHycSs^iY@< zHHfm*%nM0qpkcgS328;57+E95zcvJs)$k8-W`t3FzrF{?`#G2AIltfeo%87B?A7d% zD+S4t5JE>q2t~LBOK}kEaR<)9&oPA;u^caB2^LiP6T%dnMl)R%LK!w=4YuPAcz^77 zVlmnIU}JPEy1;I{6+c5_hTkxa=VSj8PN5&F^W$lB1JjYIkcs^c zG;k-HU>6qS!_`SX@bdWJ05&l3GS=ZPT!3GqJO3LqSWI>%csoBP)QMJbF;2!u(8QL< z{+c+y5vMZ#e4HOlXt?lBwB!fTs{V*(cqTfEE;xqnYyvG|iq#BUfs=3=y3;yzz6nie zCbnWb`ut;YJXuM@K)uLc=;x;qUqctzj|M!9Ch#447k)x_K8#ju6b*b0eb4ix8A|ac zY(mHHM&m6&jv@)!d?P%LF5HV|ydG!Zb8&nJn)#mS$I(OR^EotuZ_&ht;{4BOz|&}@ zM`HgXRuVt_87GRk!X7~_dfD311v}BeT{s;djQw7;A{)@1y@+0}&FFjYpn}c(4+ViE$vY3pFwvv7QKolmLgm3Yp9B5 z&~@gZcPxvE884$ja$zm<7hd7VO6)@Czd}F5W60WJ3=QBXV!~;3ycS)!4R6GG=sHW$ zzyru%*c$z)j{5t;(Kv7lo9O?69azHK_UGeVT!pjnL$qSYk<$y~cs(I*qDPfR??eqg zg!O3YpFuD83+Qv(8>l~<340j07r%}V{)1**!qWz7L@O~L-PvOF%zJPt_M-t$pn-lx z-y6Y&7;etriA89om!JvvBs8wkcot1$1KV}tb@Yt4q2KieDM z7Omh*vHw0A@L=?dIQ|2=vC~-W_diap~NF z6e(g@gC_76rf@e-!u{w`9zYZNriClw0^c)`!eKPPSuDg0=;a*Gy-_+`Sk%_v_jF%h UZbe0Fd2GMCq9T(!)Yw)0KM?)O-2eap diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.po b/sphinx/locale/tr/LC_MESSAGES/sphinx.po index bf5fd568c..cd8d7395e 100644 --- a/sphinx/locale/tr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.po @@ -628,10 +628,10 @@ msgstr "Son güncelleme: %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Sphinx %(sphinx_version)s ile " +"Sphinx %(sphinx_version)s ile " "oluşturulmuştur." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo index 4bc58ee1e050dc210b74c70b83c2f3b56641aaa0..5fa633d3660f05861329e2db534f8f98bd388067 100644 GIT binary patch delta 2122 zcmXZcZ)lZO9Ki9jd7W;}JD1MvZmnt8JDIFG_<%)Z~<1DEG>&Uv2acYf!0&T|W0 ze|3Fxq$GJJgm8UY2xa(KI)n;bg0d2oMoVffu`spG{AE>2VX&Agnq2V9kKsq?C(btKZeyf z9Q&8h3CGaHZs1fb;UVX%s7{J6HZV}fzyi$Rlh}dX=puJx7QaUmIEPm3GETuUybTMn zUwV7-eg)2Cyc)fqL*uoe6<(asAgQn#&1`M74}D=H5;OFpCHoYe_zRqbd(jmRqKW*7 zIUK@?1mpM^8oz)hbPMmoWF~bsa0@z7J38@FbkA3yD}E8J&>D2Y5775ML<4?;vvE%x z{~4Wd7%ly|=oK_>0ZBLs|I(PtK#C~dXhbt_jy@QD6kTBln!wX&V$a6=tI!F%(GvH@ z{u^k8--+Yf(bDh2D&`MEGz@qeo%jsiiKDS!Kv#MbUC9(qj?dTNFP#1idYG>A3EY8R zT*z#6VfExKc98z#P7!bP9LEE1A6*Tq6wUjh75$nS<6C1&t-~TubUznRKPP72s zqc%+8a`X(WKv$AS18hPT8Frz8kE5UG+34?R;y2Kh`w1@e-4h6x2ICg`E}icwdua}L~C1ZIyZQ*uC4Na;v&rI delta 2126 zcmXZceQ4EH7{Ku}ce^@WcbhBM)=lSfw<+c-WlFB7877tJ2zr51OC}R!cY%>n@#}RY zi4>OmqY$Y`OA_naixw3+EWs3&kZ9XqCHVqQLA`%e>-*h3aJipz&hK}h^E~I}Uh2Hk zxo4m(Sr$ULcx?!2yf+iVL|lS5;=?!}^LP#JKtADfzAEs0J7pmp!YMR=t_p!rVHj)i zJdVRqUFw%(if$eH`)qYc#scRUxSoO8(GE1gV>lhxA+f?{ti)}xzbp2?Llgf6Yw%?3 z|AkICf+ltuCtx`*IbUT>Qu<*N16c-c#Rhx;JFp8aawpEfZ_oq=(G@#`<8cHhVKMeo zlS|Jl@jAw9(dR8_ym{yfFG^^TR9J~-)*F2u{lTk9%&-|bKlBCq`_R+>E1JMi96yI{*(mY}HLSn= zndtiq(F7jE8Q6oy+k&pp4on(pd`-gur_cZw(2UE-hN8nHyagN4_myg~T8|eSS zHf+bA;`4ve1T&me&q5A8<*nF@OOXo@en1O5o@MPiMkhFkW_%RA zj(?&{cMeUYh)z_|OfYOh-&>3RKlGw|zX3Tu;T60cKR~zkD4N(1=Dh!-G{z1~t~60A zx<~Dp!pG4wumY{58x7Eh6d87+fsdfq^N;8mH1VrwEI*L)aViQmwPPot;#GMd;#?xf?h(ZjtEy`JmQf?h{gdLuT^qVX;b r6ZkPcID}SuJdR%|{9e(XO3&%dug>QS^_k}~vAv}}lPm1cE~xw;zkkk? diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po index 32ce1dc4a..a5141fad5 100644 --- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po @@ -635,10 +635,10 @@ msgstr "Востаннє оновлено %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" -"Створено з використанням Sphinx " +"Створено з використанням Sphinx " "%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo index 3d9dac2bab802db0929e79338934ae45be79ffe7..eb5b0763f6ea26c4514dde98b8c65e22316e12ee 100644 GIT binary patch delta 2122 zcmXZdeP~u?7{~F;+~d^dHf=VyX*$z2h_Q!~W;#I~(+o!i<$I!}G>I4)tjNhpVyz@l zs1>51qGpQZaI;uiz90-yP@%aXjPM0ngz)r7%a_XU?|FVO_c_;f&V66keV_Zx?G2wb zboC5Nnj+%QF%cthR$;_woQD;-80)YZQ@98DiLd!J3Xdxo7I6w6=kjz>1XINTK8CmO z5xnd80p<}G7w5*0FODQT@njO?xiQ_&MosVvR^obOY;<4&e&u+-;~rGwXK*ZDbo?8t z;2^58J2(;_pz5W@Cb@wXjG9QI3d^wp=i_SBBKP7n>_RorkJ_>8n2&?_C}tf0>-(v3 z5hdgcQ1>fQ^VOhsxIW>6W?~ttvki75YQQFBuINB*`3_X!eK;HsqgMDWs*!H2!V{Qn z(D^~s{25e3_iz#>MeMUCu0a*5Lls_xdgrg9R=g6mL(Qmy?Wl2EQ4@ZF6Y!ApXHf+& zqPD)@-ayTpK^jhCh>NKt{`ZZk%%;w(ZLNI{wZb{51{zU~z3BT(Q3Y3{w)joQt*9MN zoZpVx`rTMW{W!seCcJPAdz;On(BmbaQoX5%0iV9KVCSp5ZK_#l8gM12FVGn9y zKOjTnn*Gc7^GiA8)Q>S-sN+i1D@daX%txK-mmROP8|-_iucF;{+5@Qhj-%!~huVRw z&fmr<#D8PLzbNI!X@#|@70yNtXhfQgCCJ-}w^2K@#qmzm_@l_;qYt0QYp9i%^6(6t zg=uU-ZT%kP{Kd&K_Fr3miG&JY#b@z%RKA37QCnJp*)xG^tQPBVuH*Mn6Ml+11G`Y; z4&VYjh8lktRYzUu`Oy{ZzrOQHB=o=<%pM-pgRS^0eu!G(Dn0?_H=-tJLygq9m2Gp6+Y z-}H??khc&+sPDRDO0I!2)W9cEhcAtqaGreu^|`)eUw8g3%$^lwvC)S5yRZ{Aey^l{ ze4`6IYQIAb{L%I~f5q`Hs6%?)amLPf@x;{t1!<&74532RYFrNHY%Y_zv zfJ*!rQ?TCSMpQ?Bp>`a@$QvA4xX>+jH=w?XGIyVQ8nxaP)OvSO9jNp1kJyv=2L}AJ6keQm zn1kBk2-JiEq*$ASyd?{xIxdk3|#`=~dlfbDrh6YX z;i<1xL$KTz5J|4$^nc8_WYNxrV4UI#sGZD3+>DWgDgjzEwZFR>b@Vm@~wt diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po index cb7b3e6f2..079bab5e8 100644 --- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po @@ -636,9 +636,9 @@ msgstr "最后更新日期是 %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." -msgstr "使用 Sphinx %(sphinx_version)s." +msgstr "使用 Sphinx %(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 #, python-format diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo index 9dd86da5dda582e33fe90b5d939e4932868d0f7a..98c5d6e82a0f6a0ac31aa8ce95205b096b8b8fa3 100644 GIT binary patch delta 2057 zcmXZcSx8iI6vy$SP1cxAmX$h{ZD!aGWfU!7v{2YWm@QCb`4BBc8ie5HaGB5l|G)R1bMCqSJ8uhH3-8@e3Rat0 z(_pg{91t-}#R!hVZ0wH($YBfk3F9hFlFW*6B*P6u%m`t7F$2pn8PEAVh9TzHQ1{*=XD)BN@ht}f&+>C>;)aU#B{1F_^`bj?@L&d2@b+jG{ zZ7ryRIszYbq5^(F4(sDbtqKoIB+kHo%%i9$%Rv<~5%X{=#tZcI&8P&WsDgIm7z|Kx zYf*WE>kO2*3H451p*r#!m8b`G!#7l*KFq>2-jmiRp%TqRwR)br92Kt^Rp=I+fIED> z8Ywuivx$LSaBEOE)S(KvfqDhE{d_Yj;d4}LTYcVvYHg>l_o7;!Ox4;mIj9cJz-%mt z&w2lA8K?s#s3+Qi@!gCnpd62~+XGY~ee57TS%|H#CrU+5*>raa>ikBe2HT1%^Z=^m zm8kd^B>An*7w))E+*VZO?QW0z8x?3^X2K}y$)}+bEy8hFgdDbyA3b0->be*b!meVV z3Y!?HC2vskZsf4P{OEJZ;Dyh{d>o70aSm4EEPQ}!brhm9{1pW9lWU4z9^~7234AlKgaWZZ~y~0XV!RLKm z>+{*d8lP7s4D1YpJT8p+ ziASiw&)gPNL2XDa)`bcjVkaumAk^;8LVb3*sE$lQeZDJDiHlIzm!S6APE29{+2Q!W z>;&q&JmsGE^(&|V*HGX4U0;9icDSG1ZudLtzF+P?Uk{HW^knhgc3Dy@O z`_76`t=)xs@?*${V1dtTP#vg4C9Fq1X(Q_T7Y(Pw#i7vjvi&G%@ma&V HXhq6@$=$Uw delta 2061 zcmXZcduWYu9LMo5w!_%XW!QGiD5I9+l1$_>DHFN1m`f>Jtt3a}^2c~=E+>DGI#Y5< zmJ+#)iEN`JO&UtgA2v#+7$Q=RDDTfX-+DT)-|zQ4&-eR%zR&MDPs^W|H{b3TtT3~C zS!N;3$Tk~{xmbvWn2u%0VRQM(z-5~BGh2fr8LrJSBZO_k;aG?L@r2Lgn8y4P>i(;! zxOZ|ausjCsEXbFr03UH2{zVQe$~DWx2x>mZ=SxuqSK&~s_W3SU!UL$n4&xwF*?9je5ExB-V?wa=q|eh-ddeZQZNqvD)Lb@VzC z+Mc2c>JEI+iwgJ^IV{1CS~X-?DsdhTU>-(2Suv`R30Q)YFZuo`@l)%xL&3n@NL{y?_s8-K*D^T&)pbFiH0d=^C-CmC>B*6~SlZDv&dZJ9^ludCLq0X;EYOqbHLU*EC z-hhhVD9LY4zR>JGa63_zzjpiFKd3;1N2Ls-o;-p|G#`s`IdWK(A3b0UbzK|@VHYt_ zg>4Mfk{77?C*-hy{OEJZ@=QLpe2s^CVS zU-0?OfPn%&@Dq>SE?@uP^Dn3l{6!^9=VR7=g~*bPM?KVh)F0S-RN`}}#Me;Qx4I8~ zJ$T{^U2YF*H^27_e!J;KsdqdKwfQ2bf)=<-PzhI~5^hE%jJmrq`D%O~OBvX41|?j0 z(oeLb0zYy)Q3Z7&wOAi2@E~@g66K(FcNq2AO+s}fg8F=yq7tt}UB4c+*J?4u{ScOs3&bjUEk4iG@~*t6xklFjz(MFWz}Z-IQ}lH Kq-94zRp>u=54uPI diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po index 2a4fbef09..5d178af1f 100644 --- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po @@ -638,7 +638,7 @@ msgstr "最後更新日期是 %(last_updated)s." #: sphinx/themes/basic/layout.html:198 #, python-format msgid "" -"Created using Sphinx " +"Created using Sphinx " "%(sphinx_version)s." msgstr "" diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index 2ae6423e8..f061b2033 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -591,7 +591,7 @@ if errorlevel 9009 ( echo.you may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx.pocoo.org/ + echo.http://sphinx-doc.org/ exit /b 1 ) diff --git a/sphinx/texinputs/sphinxhowto.cls b/sphinx/texinputs/sphinxhowto.cls index f4e3d2f4e..9625870e7 100644 --- a/sphinx/texinputs/sphinxhowto.cls +++ b/sphinx/texinputs/sphinxhowto.cls @@ -1,5 +1,5 @@ % -% sphinxhowto.cls for Sphinx (http://sphinx.pocoo.org/) +% sphinxhowto.cls for Sphinx (http://sphinx-doc.org/) % \NeedsTeXFormat{LaTeX2e}[1995/12/01] diff --git a/sphinx/texinputs/sphinxmanual.cls b/sphinx/texinputs/sphinxmanual.cls index 57fad1a96..a04cea5ba 100644 --- a/sphinx/texinputs/sphinxmanual.cls +++ b/sphinx/texinputs/sphinxmanual.cls @@ -1,5 +1,5 @@ % -% sphinxmanual.cls for Sphinx (http://sphinx.pocoo.org/) +% sphinxmanual.cls for Sphinx (http://sphinx-doc.org/) % \NeedsTeXFormat{LaTeX2e}[1995/12/01] diff --git a/sphinx/themes/basic/layout.html b/sphinx/themes/basic/layout.html index 9fb989cbe..612dc38f9 100644 --- a/sphinx/themes/basic/layout.html +++ b/sphinx/themes/basic/layout.html @@ -195,7 +195,7 @@ {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %} {%- endif %} {%- if show_sphinx %} - {% trans sphinx_version=sphinx_version|e %}Created using Sphinx {{ sphinx_version }}.{% endtrans %} + {% trans sphinx_version=sphinx_version|e %}Created using Sphinx {{ sphinx_version }}.{% endtrans %} {%- endif %} {%- endblock %} diff --git a/tests/test_build_html.py b/tests/test_build_html.py index 62bd5a88b..a693e6c00 100644 --- a/tests/test_build_html.py +++ b/tests/test_build_html.py @@ -44,7 +44,7 @@ reading included file u'.*?wrongenc.inc' seems to be wrong, try giving an \ %(root)s/includes.txt:4: WARNING: download file not readable: .*?nonexisting.png %(root)s/objects.txt:\\d*: WARNING: using old C markup; please migrate to \ new-style markup \(e.g. c:function instead of cfunction\), see \ -http://sphinx.pocoo.org/domains.html +http://sphinx-doc.org/domains.html """ HTML_WARNINGS = ENV_WARNINGS + """\ From dd84529c421871f60e3bb136993fc958134afb58 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 4 Nov 2012 11:29:47 +0100 Subject: [PATCH 091/250] Add the Ubuntu packaging guide. --- EXAMPLES | 1 + 1 file changed, 1 insertion(+) diff --git a/EXAMPLES b/EXAMPLES index 575f35d84..3e9e8265f 100644 --- a/EXAMPLES +++ b/EXAMPLES @@ -169,6 +169,7 @@ Documentation using a custom theme/integrated in a site * SQLAlchemy: http://www.sqlalchemy.org/docs/ * tinyTiM: http://tinytim.sourceforge.net/docs/2.0/ * tipfy: http://www.tipfy.org/docs/ +* Ubuntu packaging guide: http://developer.ubuntu.com/packaging/html/ * Werkzeug: http://werkzeug.pocoo.org/docs/ * WFront: http://discorporate.us/projects/WFront/ From 99621d7a01638872a5af727aaa8714b269c0f769 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 7 Nov 2012 07:42:44 +0900 Subject: [PATCH 092/250] Closes #920: rescue PIL packaging issue that allow import `Image` without `PIL` namespace. Also closes #702. --- sphinx/writers/html.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py index 2051e38ee..d714ed4f3 100644 --- a/sphinx/writers/html.py +++ b/sphinx/writers/html.py @@ -23,7 +23,10 @@ from sphinx.util.smartypants import sphinx_smarty_pants try: from PIL import Image # check for the Python Imaging Library except ImportError: - Image = None + try: + import Image + except ImportError: + Image = None class HTMLWriter(Writer): From 378b18d85ea0f9f7bf983a532876fd2b9b4bbdf4 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 7 Nov 2012 19:22:01 +0900 Subject: [PATCH 093/250] #1024 make.bat improve error message if Sphinx is not found --- sphinx/quickstart.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index f061b2033..b4f634384 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -584,15 +584,15 @@ if "%%1" == "clean" ( %%SPHINXBUILD%% 2> nul if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure Sphinx is - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively - echo.you may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 +\techo. +\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx +\techo.installed, then set the SPHINXBUILD environment variable to point +\techo.to the full path of the 'sphinx-build' executable. Alternatively you +\techo.may add the Sphinx directory to PATH. +\techo. +\techo.If you don't have Sphinx installed, grab it from +\techo.http://sphinx-doc.org/ +\texit /b 1 ) if "%%1" == "html" ( From dd09c4ce45f2971a30e9abb17f2bd7cde1554261 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 7 Nov 2012 19:24:05 +0900 Subject: [PATCH 094/250] Closes #1024: Makefile improve error message if Sphinx is not found --- sphinx/quickstart.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index b4f634384..fbaee9ef5 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -377,6 +377,21 @@ SPHINXBUILD = sphinx-build PAPER = BUILDDIR = %(rbuilddir)s +ifneq ($(shell $(SPHINXBUILD) 2> /dev/null; echo $$?), 0) +define MSG + + +The 'sphinx-build' command was not found. Make sure you have Sphinx +installed, then set the SPHINXBUILD environment variable to point +to the full path of the 'sphinx-build' executable. Alternatively you +may add the Sphinx directory to PATH. + +If you don't have Sphinx installed, grab it from +http://sphinx-doc.org/ +endef +$(error $(MSG)) +endif + # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter From 22d1280dac44f29f816ea4327d27e62e81eb78b0 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Fri, 9 Nov 2012 07:53:58 +0900 Subject: [PATCH 095/250] Closes #1024: 'command not found' status code is 127. --- sphinx/quickstart.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index fbaee9ef5..2bba4459d 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -377,7 +377,7 @@ SPHINXBUILD = sphinx-build PAPER = BUILDDIR = %(rbuilddir)s -ifneq ($(shell $(SPHINXBUILD) 2> /dev/null; echo $$?), 0) +ifeq ($(shell $(SPHINXBUILD) 2> /dev/null; echo $$?), 127) define MSG From d7f7143cb5964de064815fc96e25222822f10782 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Fri, 9 Nov 2012 11:24:37 +0900 Subject: [PATCH 096/250] Closes #1037: fix typos in Polish translation by attached patch. --- sphinx/locale/pl/LC_MESSAGES/sphinx.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.po b/sphinx/locale/pl/LC_MESSAGES/sphinx.po index 9ff1e24eb..f6379d340 100644 --- a/sphinx/locale/pl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.po @@ -556,7 +556,7 @@ msgstr "wszystkie rozdziały i podrozdziały" #: sphinx/themes/basic/defindex.html:26 msgid "search this documentation" -msgstr "przyszukaj tę dokumentację" +msgstr "przeszukaj tę dokumentację" #: sphinx/themes/basic/defindex.html:28 msgid "Global Module Index" @@ -656,7 +656,7 @@ msgstr "następny rozdział" msgid "" "Please activate JavaScript to enable the search\n" " functionality." -msgstr "Aby umożliwić wuszukiwanie, proszę włączyć JavaScript." +msgstr "Aby umożliwić wyszukiwanie, proszę włączyć JavaScript." #: sphinx/themes/basic/search.html:29 msgid "" @@ -696,7 +696,7 @@ msgstr "Ta strona" #: sphinx/themes/basic/changes/versionchanges.html:12 #, python-format msgid "Changes in Version %(version)s — %(docstitle)s" -msgstr "Zmiany w wesji %(version)s — %(docstitle)s" +msgstr "Zmiany w wersji %(version)s — %(docstitle)s" #: sphinx/themes/basic/changes/rstsource.html:5 #, python-format From 34cbd684a91d6314afe3a5828cfd488ca0d7711b Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Thu, 8 Nov 2012 21:16:41 -0600 Subject: [PATCH 097/250] Update sys.path to avoid autodoc warnings when building docs in tests/root. --- tests/root/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/root/conf.py b/tests/root/conf.py index 37d5e91a7..a3ebeec79 100644 --- a/tests/root/conf.py +++ b/tests/root/conf.py @@ -3,6 +3,7 @@ import sys, os sys.path.append(os.path.abspath('.')) +sys.path.append(os.path.abspath('..')) extensions = ['sphinx.ext.autodoc', 'sphinx.ext.jsmath', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.autosummary', From 6f9e541ab534686d1db1fd6d16763cae8ffa3425 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Thu, 8 Nov 2012 21:19:47 -0600 Subject: [PATCH 098/250] autodoc: Handle explicit instance attributes in :members: (re #904) --- sphinx/ext/autodoc.py | 31 ++++++++++++++++------------- tests/root/autodoc.txt | 13 ++++++++++++ tests/test_autodoc.py | 45 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 14 deletions(-) diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 44c7ad8bb..691fef7af 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -489,20 +489,26 @@ class Documenter(object): If *want_all* is True, return all members. Else, only return those members given by *self.options.members* (which may also be none). """ + analyzed_member_names = set() + if self.analyzer: + attr_docs = self.analyzer.find_attr_docs() + namespace = '.'.join(self.objpath) + for item in attr_docs.iteritems(): + if item[0][0] == namespace: + analyzed_member_names.add(item[0][1]) if not want_all: if not self.options.members: return False, [] # specific members given - ret = [] + members = [] for mname in self.options.members: try: - ret.append((mname, self.get_attr(self.object, mname))) + members.append((mname, self.get_attr(self.object, mname))) except AttributeError: - self.directive.warn('missing attribute %s in object %s' - % (mname, self.fullname)) - return False, ret - - if self.options.inherited_members: + if mname not in analyzed_member_names: + self.directive.warn('missing attribute %s in object %s' + % (mname, self.fullname)) + elif self.options.inherited_members: # safe_getmembers() uses dir() which pulls in members from all # base classes members = safe_getmembers(self.object) @@ -521,13 +527,10 @@ class Documenter(object): for mname in obj_dict.keys()] membernames = set(m[0] for m in members) # add instance attributes from the analyzer - if self.analyzer: - attr_docs = self.analyzer.find_attr_docs() - namespace = '.'.join(self.objpath) - for item in attr_docs.iteritems(): - if item[0][0] == namespace: - if item[0][1] not in membernames: - members.append((item[0][1], INSTANCEATTR)) + for aname in analyzed_member_names: + if aname not in membernames and \ + (want_all or aname in self.options.members): + members.append((aname, INSTANCEATTR)) return False, sorted(members) def filter_members(self, members, want_all): diff --git a/tests/root/autodoc.txt b/tests/root/autodoc.txt index 5c03f947c..d4b3404c4 100644 --- a/tests/root/autodoc.txt +++ b/tests/root/autodoc.txt @@ -32,3 +32,16 @@ Just testing a few autodoc possibilities... :noindex: .. autoclass:: MarkupError + + +.. currentmodule:: test_autodoc + +.. autoclass:: InstAttCls + :members: + + All members (5 total) + +.. autoclass:: InstAttCls + :members: ca1, ia1 + + Specific members (2 total) diff --git a/tests/test_autodoc.py b/tests/test_autodoc.py index 6dedaad8f..642b91412 100644 --- a/tests/test_autodoc.py +++ b/tests/test_autodoc.py @@ -540,6 +540,32 @@ def test_generate(): assert_result_contains( ' :annotation: = None', 'attribute', 'AttCls.a2') + # test explicit members with instance attributes + del directive.env.temp_data['autodoc:class'] + del directive.env.temp_data['autodoc:module'] + directive.env.temp_data['py:module'] = 'test_autodoc' + options.inherited_members = False + options.undoc_members = False + options.members = ALL + assert_processes([ + ('class', 'test_autodoc.InstAttCls'), + ('attribute', 'test_autodoc.InstAttCls.ca1'), + ('attribute', 'test_autodoc.InstAttCls.ca2'), + ('attribute', 'test_autodoc.InstAttCls.ca3'), + ('attribute', 'test_autodoc.InstAttCls.ia1'), + ('attribute', 'test_autodoc.InstAttCls.ia2'), + ], 'class', 'InstAttCls') + del directive.env.temp_data['autodoc:class'] + del directive.env.temp_data['autodoc:module'] + options.members = ['ca1', 'ia1'] + assert_processes([ + ('class', 'test_autodoc.InstAttCls'), + ('attribute', 'test_autodoc.InstAttCls.ca1'), + ('attribute', 'test_autodoc.InstAttCls.ia1'), + ], 'class', 'InstAttCls') + del directive.env.temp_data['autodoc:class'] + del directive.env.temp_data['autodoc:module'] + del directive.env.temp_data['py:module'] # --- generate fodder ------------ @@ -680,3 +706,22 @@ class StrRepr(str): class AttCls(object): a1 = StrRepr('hello\nworld') a2 = None + +class InstAttCls(object): + """Class with documented class and instance attributes.""" + + #: Doc comment for class attribute InstAttCls.ca1. + #: It can have multiple lines. + ca1 = 'a' + + ca2 = 'b' #: Doc comment for InstAttCls.ca2. One line only. + + ca3 = 'c' + """Docstring for class attribute InstAttCls.ca3.""" + + def __init__(self): + #: Doc comment for instance attribute InstAttCls.ia1 + self.ia1 = 'd' + + self.ia2 = 'e' + """Docstring for instance attribute InstAttCls.ia2.""" From eabcf7883ee0b4ea9b1f2da320581a3e454bf692 Mon Sep 17 00:00:00 2001 From: Jakub Wilk Date: Fri, 9 Nov 2012 18:09:50 +0400 Subject: [PATCH 099/250] sphinx/search/__init__.py: make stopwords array sorted --- sphinx/search/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/search/__init__.py b/sphinx/search/__init__.py index 6e9610a49..a3ff4bb4e 100644 --- a/sphinx/search/__init__.py +++ b/sphinx/search/__init__.py @@ -283,5 +283,5 @@ class IndexBuilder(object): def context_for_searchtool(self): return dict( search_language_stemming_code = self.lang.js_stemmer_code, - search_language_stop_words = jsdump.dumps(self.lang.stopwords), + search_language_stop_words = jsdump.dumps(sorted(self.lang.stopwords)), ) From c134b218b743206697ce1843b2a529d7ec526d41 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sat, 10 Nov 2012 23:37:42 -0600 Subject: [PATCH 100/250] Closes #681: Allow nested parentheses in C++ signatures (patch by Vadim and Jim Naslund) --- sphinx/domains/cpp.py | 38 +++++++++++++++++++++++++++----------- tests/test_cpp_domain.py | 17 ++++++++++++++++- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index a6392c1cb..31daa1f68 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -760,17 +760,33 @@ class DefinitionParser(object): self.skip_ws() if self.match(_string_re): return self.matched_text - idx1 = self.definition.find(',', self.pos) - idx2 = self.definition.find(')', self.pos) - if idx1 < 0: - idx = idx2 - elif idx2 < 0: - idx = idx1 - else: - idx = min(idx1, idx2) - if idx < 0: - self.fail('unexpected end in default expression') - rv = self.definition[self.pos:idx] + paren_stack_depth = 0 + max_pos = len(self.definition) + rv_start = self.pos + while 1: + idx0 = self.definition.find('(', self.pos) + idx1 = self.definition.find(',', self.pos) + idx2 = self.definition.find(')', self.pos) + if idx0 < 0: + idx0 = max_pos + if idx1 < 0: + idx1 = max_pos + if idx2 < 0: + idx2 = max_pos + idx = min(idx0, idx1, idx2) + if idx >= max_pos: + self.fail('unexpected end in default expression') + if idx == idx0: + paren_stack_depth += 1 + elif idx == idx2: + paren_stack_depth -= 1 + if paren_stack_depth < 0: + break + elif paren_stack_depth == 0: + break + self.pos = idx+1 + + rv = self.definition[rv_start:idx] self.pos = idx return rv diff --git a/tests/test_cpp_domain.py b/tests/test_cpp_domain.py index 3ab8ece4c..bd8aafa76 100644 --- a/tests/test_cpp_domain.py +++ b/tests/test_cpp_domain.py @@ -11,7 +11,7 @@ from util import * -from sphinx.domains.cpp import DefinitionParser +from sphinx.domains.cpp import DefinitionParser, DefinitionError def parse(name, string): @@ -73,6 +73,21 @@ def test_type_definitions(): x = 'module::myclass foo[n]' assert unicode(parse('member_object', x)) == x + x = 'int foo(Foo f=Foo(double(), std::make_pair(int(2), double(3.4))))' + assert unicode(parse('function', x)) == x + + x = 'int foo(A a=x(a))' + assert unicode(parse('function', x)) == x + + x = 'int foo(B b=x(a)' + raises(DefinitionError, parse, 'function', x) + + x = 'int foo)C c=x(a))' + raises(DefinitionError, parse, 'function', x) + + x = 'int foo(D d=x(a' + raises(DefinitionError, parse, 'function', x) + def test_bases(): x = 'A' From 4e715ff0bf89d6f1dc557e22280369e7002d6a4c Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sun, 11 Nov 2012 01:33:52 -0600 Subject: [PATCH 101/250] Avoid unknown option warnings for use_2to3 in setup.py under Python 2. --- setup.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 060e33a23..03f8e8e14 100644 --- a/setup.py +++ b/setup.py @@ -53,6 +53,14 @@ if sys.version_info < (2, 5): print('ERROR: Sphinx requires at least Python 2.5 to run.') sys.exit(1) +# tell distribute to use 2to3 with our own fixers +extra = {} +if sys.version_info >= (3, 0): + extra.update( + use_2to3=True, + use_2to3_fixers=['custom_fixers'] + ) + # Provide a "compile_catalog" command that also creates the translated # JavaScript files if Babel is available. @@ -189,6 +197,5 @@ setup( }, install_requires=requires, cmdclass=cmdclass, - use_2to3=True, - use_2to3_fixers=['custom_fixers'], + **extra ) From 30c3fff6d79a63b4e892aecf5aa84530c48f51a6 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Thu, 22 Nov 2012 11:43:09 +0900 Subject: [PATCH 102/250] fixed #955: footnote i18n translation cause KeyError and 'Only update text nodes in translation' change at b7b808e46851 break translation. --- sphinx/environment.py | 19 ++++++++++++++----- tests/root/contents.txt | 1 + tests/root/i18n_footnote.po | 30 ++++++++++++++++++++++++++++++ tests/root/i18n_footnote.txt | 10 ++++++++++ tests/test_intl.py | 25 ++++++++++++++++++++++++- 5 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 tests/root/i18n_footnote.po create mode 100644 tests/root/i18n_footnote.txt diff --git a/sphinx/environment.py b/sphinx/environment.py index bfad00f43..9e971ed38 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -226,11 +226,20 @@ class Locale(Transform): if not isinstance(patch, nodes.paragraph): continue # skip for now - # copy text children - for i, child in enumerate(patch.children): - if isinstance(child, nodes.Text): - child.parent = node - node.children[i] = child + footnote_refs = [r for r in node.children + if isinstance(r, nodes.footnote_reference) + and r.get('auto') == 1] + for i, child in enumerate(patch.children): # update leaves + if isinstance(child, nodes.footnote_reference): + # use original 'footnote_reference' object. + # this object already registered in self.document.autofootnote_refs + patch.children[i] = footnote_refs.pop(0) + # Some duplicated footnote_reference in msgstr cause + # IndexError by .pop(0). That is invalid msgstr. + + for child in patch.children: # update leaves + child.parent = node + node.children = patch.children class SphinxStandaloneReader(standalone.Reader): diff --git a/tests/root/contents.txt b/tests/root/contents.txt index ad246cb77..3ba41eedb 100644 --- a/tests/root/contents.txt +++ b/tests/root/contents.txt @@ -28,6 +28,7 @@ Contents: extensions versioning/index only + i18n_footnote Python diff --git a/tests/root/i18n_footnote.po b/tests/root/i18n_footnote.po new file mode 100644 index 000000000..b7f2b584b --- /dev/null +++ b/tests/root/i18n_footnote.po @@ -0,0 +1,30 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2012, foof +# This file is distributed under the same license as the foo package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: sphinx 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-11-22 08:28\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "i18n with Footnote" +msgstr "I18N WITH FOOTNOTE" + +msgid "Contents [#]_ for `i18n with Footnote`_ [ref]_" +msgstr "`I18N WITH FOOTNOTE`_ INCLUDE THIS CONTENTS [ref]_ [#]_" + +msgid "This is a auto numbered footnote." +msgstr "THIS IS A AUTO NUMBERED FOOTNOTE." + +msgid "This is a named footnote." +msgstr "THIS IS A NAMED FOOTNOTE." + diff --git a/tests/root/i18n_footnote.txt b/tests/root/i18n_footnote.txt new file mode 100644 index 000000000..3a1097af2 --- /dev/null +++ b/tests/root/i18n_footnote.txt @@ -0,0 +1,10 @@ +:tocdepth: 2 + +i18n with Footnote +================== +.. #955 cant-build-html-with-footnotes-when-using + +Contents [#]_ for `i18n with Footnote`_ [ref]_ + +.. [#] This is a auto numbered footnote. +.. [ref] This is a named footnote. diff --git a/tests/test_intl.py b/tests/test_intl.py index d1e28002f..010051661 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -19,7 +19,7 @@ from util import SkipTest def setup_module(): (test_root / 'xx' / 'LC_MESSAGES').makedirs() # Compile all required catalogs into binary format (*.mo). - for catalog in 'bom', 'subdir': + for catalog in 'bom', 'subdir', 'i18n_footnote': try: p = Popen(['msgfmt', test_root / '%s.po' % catalog, '-o', test_root / 'xx' / 'LC_MESSAGES' / '%s.mo' % catalog], @@ -63,3 +63,26 @@ def test_subdir(app): app.builder.build(['subdir/includes']) result = (app.outdir / 'subdir' / 'includes.txt').text(encoding='utf-8') assert result.startswith(u"\ntranslation\n***********\n\n") + + +@with_app(buildername='html', + confoverrides={'language': 'xx', 'locale_dirs': ['.']}) +def test_i18n_footnote_break_refid(app): + """test for #955 cant-build-html-with-footnotes-when-using""" + app.builder.build(['i18n_footnote']) + result = (app.outdir / 'i18n_footnote.html').text(encoding='utf-8') + # expect no error by build + + +@with_app(buildername='text', + confoverrides={'language': 'xx', 'locale_dirs': ['.']}) +def test_i18n_footnote_regression(app): + """regression test for fix #955""" + app.builder.build(['i18n_footnote']) + result = (app.outdir / 'i18n_footnote.txt').text(encoding='utf-8') + expect = (u"\nI18N WITH FOOTNOTE" + u"\n******************\n" # underline matches new translation + u"\nI18N WITH FOOTNOTE INCLUDE THIS CONTENTS [ref] [1]\n" + u"\n[1] THIS IS A AUTO NUMBERED FOOTNOTE.\n" + u"\n[ref] THIS IS A NAMED FOOTNOTE.\n") + assert result == expect From f50091b643edb3dc1eeb238fa2110c52e0244c59 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Thu, 22 Nov 2012 12:12:41 +0900 Subject: [PATCH 103/250] fix #955: consider the numbered-footnote. update test and code --- sphinx/environment.py | 3 ++- tests/root/i18n_footnote.po | 7 +++++-- tests/root/i18n_footnote.txt | 3 ++- tests/test_intl.py | 5 +++-- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index 9e971ed38..8fe52bb9a 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -230,7 +230,8 @@ class Locale(Transform): if isinstance(r, nodes.footnote_reference) and r.get('auto') == 1] for i, child in enumerate(patch.children): # update leaves - if isinstance(child, nodes.footnote_reference): + if isinstance(child, nodes.footnote_reference) \ + and child.get('auto') == 1: # use original 'footnote_reference' object. # this object already registered in self.document.autofootnote_refs patch.children[i] = footnote_refs.pop(0) diff --git a/tests/root/i18n_footnote.po b/tests/root/i18n_footnote.po index b7f2b584b..47f8d3db4 100644 --- a/tests/root/i18n_footnote.po +++ b/tests/root/i18n_footnote.po @@ -19,8 +19,8 @@ msgstr "" msgid "i18n with Footnote" msgstr "I18N WITH FOOTNOTE" -msgid "Contents [#]_ for `i18n with Footnote`_ [ref]_" -msgstr "`I18N WITH FOOTNOTE`_ INCLUDE THIS CONTENTS [ref]_ [#]_" +msgid "[100]_ Contents [#]_ for `i18n with Footnote`_ [ref]_" +msgstr "`I18N WITH FOOTNOTE`_ INCLUDE THIS CONTENTS [ref]_ [#]_ [100]_" msgid "This is a auto numbered footnote." msgstr "THIS IS A AUTO NUMBERED FOOTNOTE." @@ -28,3 +28,6 @@ msgstr "THIS IS A AUTO NUMBERED FOOTNOTE." msgid "This is a named footnote." msgstr "THIS IS A NAMED FOOTNOTE." +msgid "This is a numbered footnote." +msgstr "THIS IS A NUMBERED FOOTNOTE." + diff --git a/tests/root/i18n_footnote.txt b/tests/root/i18n_footnote.txt index 3a1097af2..3ef76bbaa 100644 --- a/tests/root/i18n_footnote.txt +++ b/tests/root/i18n_footnote.txt @@ -4,7 +4,8 @@ i18n with Footnote ================== .. #955 cant-build-html-with-footnotes-when-using -Contents [#]_ for `i18n with Footnote`_ [ref]_ +[100]_ Contents [#]_ for `i18n with Footnote`_ [ref]_ .. [#] This is a auto numbered footnote. .. [ref] This is a named footnote. +.. [100] This is a numbered footnote. diff --git a/tests/test_intl.py b/tests/test_intl.py index 010051661..19d5ab4a5 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -82,7 +82,8 @@ def test_i18n_footnote_regression(app): result = (app.outdir / 'i18n_footnote.txt').text(encoding='utf-8') expect = (u"\nI18N WITH FOOTNOTE" u"\n******************\n" # underline matches new translation - u"\nI18N WITH FOOTNOTE INCLUDE THIS CONTENTS [ref] [1]\n" + u"\nI18N WITH FOOTNOTE INCLUDE THIS CONTENTS [ref] [1] [100]\n" u"\n[1] THIS IS A AUTO NUMBERED FOOTNOTE.\n" - u"\n[ref] THIS IS A NAMED FOOTNOTE.\n") + u"\n[ref] THIS IS A NAMED FOOTNOTE.\n" + u"\n[100] THIS IS A NUMBERED FOOTNOTE.\n") assert result == expect From c347b50330a18a9328c62b30aba3892de4a755db Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Tue, 27 Nov 2012 17:30:08 +0900 Subject: [PATCH 104/250] fix #1044 refs #955: fix external/inline links with localization --- sphinx/environment.py | 14 ++++++++++ tests/root/contents.txt | 1 + tests/root/i18n_external_links.po | 32 ++++++++++++++++++++++ tests/root/i18n_external_links.txt | 13 +++++++++ tests/test_intl.py | 43 +++++++++++++++++++++++++++++- 5 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 tests/root/i18n_external_links.po create mode 100644 tests/root/i18n_external_links.txt diff --git a/sphinx/environment.py b/sphinx/environment.py index 8fe52bb9a..d39270339 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -229,6 +229,8 @@ class Locale(Transform): footnote_refs = [r for r in node.children if isinstance(r, nodes.footnote_reference) and r.get('auto') == 1] + refs = [r for r in node.children if isinstance(r, nodes.reference)] + for i, child in enumerate(patch.children): # update leaves if isinstance(child, nodes.footnote_reference) \ and child.get('auto') == 1: @@ -238,6 +240,18 @@ class Locale(Transform): # Some duplicated footnote_reference in msgstr cause # IndexError by .pop(0). That is invalid msgstr. + elif isinstance(child, nodes.reference): + # reference use original 'refname'. + # * reference target ".. _Python: ..." is not translatable. + # * section refname is not translatable. + # * inline reference "`Python <...>`_" have no 'refname'. + if refs and 'refname' in refs[0]: + refname = child['refname'] = refs.pop(0)['refname'] + self.document.refnames.setdefault( + refname, []).append(child) + # if reference node count is not same before translation + # that offen generate unknown link target warning. + for child in patch.children: # update leaves child.parent = node node.children = patch.children diff --git a/tests/root/contents.txt b/tests/root/contents.txt index 3ba41eedb..8fcd4a9bf 100644 --- a/tests/root/contents.txt +++ b/tests/root/contents.txt @@ -29,6 +29,7 @@ Contents: versioning/index only i18n_footnote + i18n_external_links Python diff --git a/tests/root/i18n_external_links.po b/tests/root/i18n_external_links.po new file mode 100644 index 000000000..4cd19ddab --- /dev/null +++ b/tests/root/i18n_external_links.po @@ -0,0 +1,32 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2012, foof +# This file is distributed under the same license as the foo package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: sphinx 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-11-22 08:28\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "i18n with external links" +msgstr "EXTERNAL LINKS" + +msgid "External link to Python_." +msgstr "EXTERNAL LINK TO Python_." + +msgid "Internal link to `i18n with external links`_." +msgstr "`EXTERNAL LINKS`_ IS INTERNAL LINK." + +msgid "Inline link by `Sphinx `_." +msgstr "INLINE LINK BY `SPHINX `_." + +msgid "Unnamed link__." +msgstr "UNNAMED LINK__." diff --git a/tests/root/i18n_external_links.txt b/tests/root/i18n_external_links.txt new file mode 100644 index 000000000..7ac1db02e --- /dev/null +++ b/tests/root/i18n_external_links.txt @@ -0,0 +1,13 @@ +:tocdepth: 2 + +i18n with external links +======================== +.. #1044 external-links-dont-work-in-localized-html + +* External link to Python_. +* Internal link to `i18n with external links`_. +* Inline link by `Sphinx `_. +* Unnamed link__. + +.. _Python: http://python.org +.. __: http://google.com diff --git a/tests/test_intl.py b/tests/test_intl.py index 19d5ab4a5..1c7df2543 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -11,6 +11,7 @@ """ from subprocess import Popen, PIPE +import re from util import * from util import SkipTest @@ -19,7 +20,7 @@ from util import SkipTest def setup_module(): (test_root / 'xx' / 'LC_MESSAGES').makedirs() # Compile all required catalogs into binary format (*.mo). - for catalog in 'bom', 'subdir', 'i18n_footnote': + for catalog in 'bom', 'subdir', 'i18n_footnote', 'i18n_external_links': try: p = Popen(['msgfmt', test_root / '%s.po' % catalog, '-o', test_root / 'xx' / 'LC_MESSAGES' / '%s.mo' % catalog], @@ -87,3 +88,43 @@ def test_i18n_footnote_regression(app): u"\n[ref] THIS IS A NAMED FOOTNOTE.\n" u"\n[100] THIS IS A NUMBERED FOOTNOTE.\n") assert result == expect + + +@with_app(buildername='html', + confoverrides={'language': 'xx', 'locale_dirs': ['.']}) +def test_i18n_keep_external_links(app): + """regression test for #1044""" + app.builder.build(['i18n_external_links']) + result = (app.outdir / 'i18n_external_links.html').text(encoding='utf-8') + + # external link check + expect_line = u"""

  • EXTERNAL LINK TO Python.
  • """ + matched = re.search('^
  • EXTERNAL LINK TO .*$', result, re.M) + matched_line = '' + if matched: + matched_line = matched.group() + assert expect_line == matched_line + + # internal link check + expect_line = u"""
  • EXTERNAL LINKS IS INTERNAL LINK.
  • """ + matched = re.search('^
  • $', result, re.M) + matched_line = '' + if matched: + matched_line = matched.group() + assert expect_line == matched_line + + # inline link check + expect_line = u"""
  • INLINE LINK BY SPHINX.
  • """ + matched = re.search('^
  • INLINE LINK BY .*$', result, re.M) + matched_line = '' + if matched: + matched_line = matched.group() + assert expect_line == matched_line + + # unnamed link check + expect_line = u"""
  • UNNAMED LINK.
  • """ + matched = re.search('^
  • UNNAMED .*$', result, re.M) + matched_line = '' + if matched: + matched_line = matched.group() + assert expect_line == matched_line From fb770e9013d79d5c6170f0a4e07efd3403e75b37 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Tue, 27 Nov 2012 20:07:30 +0900 Subject: [PATCH 105/250] fix some grammar refs #1044. thanks @mitya57 ! --- sphinx/environment.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index d39270339..2e2dcfc00 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -235,22 +235,22 @@ class Locale(Transform): if isinstance(child, nodes.footnote_reference) \ and child.get('auto') == 1: # use original 'footnote_reference' object. - # this object already registered in self.document.autofootnote_refs + # this object is already registered in self.document.autofootnote_refs patch.children[i] = footnote_refs.pop(0) # Some duplicated footnote_reference in msgstr cause - # IndexError by .pop(0). That is invalid msgstr. + # IndexError in .pop(0). That is invalid msgstr. elif isinstance(child, nodes.reference): - # reference use original 'refname'. + # reference should use original 'refname'. # * reference target ".. _Python: ..." is not translatable. # * section refname is not translatable. - # * inline reference "`Python <...>`_" have no 'refname'. + # * inline reference "`Python <...>`_" has no 'refname'. if refs and 'refname' in refs[0]: refname = child['refname'] = refs.pop(0)['refname'] self.document.refnames.setdefault( refname, []).append(child) - # if reference node count is not same before translation - # that offen generate unknown link target warning. + # if number of reference nodes had been changed, that + # would often generate unknown link target warning. for child in patch.children: # update leaves child.parent = node From 96779ffed80d9a276905ddaa4210d9b190291231 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 28 Nov 2012 15:26:44 +0900 Subject: [PATCH 106/250] fix: cpp domain parser cannot parse a const type with a modifier. closes #1041 --- sphinx/domains/cpp.py | 10 ++++++---- tests/test_cpp_domain.py | 9 +++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 31daa1f68..edbc091ef 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -672,8 +672,9 @@ class DefinitionParser(object): except ValueError: return False - def _parse_builtin(self, modifier): - path = [modifier] + def _parse_builtin(self, modifiers): + modifier = modifiers[-1] + path = modifiers following = self._modifiers[modifier] while 1: self.skip_ws() @@ -730,9 +731,10 @@ class DefinitionParser(object): # impossible for a template to follow, so what # we do is go to a different function that just # eats types - if following is not None: - return self._parse_builtin(modifier) modifiers.append(modifier) + if following is not None: + return self._parse_builtin(modifiers) + self.skip_ws() else: self.backout() break diff --git a/tests/test_cpp_domain.py b/tests/test_cpp_domain.py index bd8aafa76..64a52aa96 100644 --- a/tests/test_cpp_domain.py +++ b/tests/test_cpp_domain.py @@ -43,6 +43,15 @@ def test_type_definitions(): x = 'int printf(const char* fmt, ...)' assert unicode(parse('function', x)) == x + x = 'int foo(const unsigned int j)' + assert unicode(parse('function', x)) == x + + x = 'int foo(const unsigned int const j)' + assert unicode(parse('function', x)) == x + + x = 'int foo(const int* const ptr)' + assert unicode(parse('function', x)) == x + x = 'std::vector> module::blah' assert unicode(parse('type_object', x)) == x From f24b1998f22b0578bc107abc7b6a44de56e90dfe Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 28 Nov 2012 15:49:06 +0900 Subject: [PATCH 107/250] fix: cpp domain parser cannot parse 'static constexpr' declarations. closes #1038 --- sphinx/domains/cpp.py | 2 +- tests/test_cpp_domain.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index 31daa1f68..6c18b1f6f 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -852,7 +852,7 @@ class DefinitionParser(object): visibility = 'public' if self.match(_visibility_re): visibility = self.matched_text - static = self.skip_word('static') + static = self.skip_word_and_ws('static') return visibility, static def parse_type(self): diff --git a/tests/test_cpp_domain.py b/tests/test_cpp_domain.py index bd8aafa76..dae91aed9 100644 --- a/tests/test_cpp_domain.py +++ b/tests/test_cpp_domain.py @@ -60,6 +60,9 @@ def test_type_definitions(): x = 'constexpr int get_value()' assert unicode(parse('function', x)) == x + x = 'static constexpr int get_value()' + assert unicode(parse('function', x)) == x + x = 'int get_value() const noexcept' assert unicode(parse('function', x)) == x From e9c058271319baa0e586b4bca771768168fc7343 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 28 Nov 2012 23:21:02 +0900 Subject: [PATCH 108/250] fix: sphinx-quickstart asks again and again Y|N because input() return value with extra '\r' on Python-3.2.0 + Windows. closes #1043 --- sphinx/quickstart.py | 2 +- tests/test_quickstart.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index 2bba4459d..64c2e23ca 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -824,7 +824,7 @@ def do_prompt(d, key, text, default=None, validator=nonempty): prompt = purple(PROMPT_PREFIX + '%s [%s]: ' % (text, default)) else: prompt = purple(PROMPT_PREFIX + text + ': ') - x = term_input(prompt) + x = term_input(prompt).strip() if default and not x: x = default if not isinstance(x, unicode): diff --git a/tests/test_quickstart.py b/tests/test_quickstart.py index dba888ddb..c054f8589 100644 --- a/tests/test_quickstart.py +++ b/tests/test_quickstart.py @@ -46,6 +46,25 @@ def teardown_module(): coloron() +def test_quickstart_inputstrip(): + d = {} + answers = { + 'Q1': 'Y\r', # input() return with '\r' on Python-3.2.0 for Windows + 'Q2': ' Yes \r', + 'Q3': 'N', + 'Q4': 'N ', + } + qs.term_input = mock_raw_input(answers) + qs.do_prompt(d, 'k1', 'Q1') + assert d['k1'] == 'Y' + qs.do_prompt(d, 'k2', 'Q2') + assert d['k2'] == 'Yes' + qs.do_prompt(d, 'k3', 'Q3') + assert d['k3'] == 'N' + qs.do_prompt(d, 'k4', 'Q4') + assert d['k4'] == 'N' + + def test_do_prompt(): d = {} answers = { From 0cca0ad7cf144697f46524a89f1839c1e375e210 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Thu, 29 Nov 2012 19:11:19 -0600 Subject: [PATCH 109/250] Add initial draft of "Sphinx Developer's Guide" --- doc/contents.rst | 1 + doc/devguide.rst | 184 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 185 insertions(+) create mode 100644 doc/devguide.rst diff --git a/doc/contents.rst b/doc/contents.rst index 3bbc28350..5e0ae6c12 100644 --- a/doc/contents.rst +++ b/doc/contents.rst @@ -22,6 +22,7 @@ Sphinx documentation contents faq glossary + devguide changes examples diff --git a/doc/devguide.rst b/doc/devguide.rst new file mode 100644 index 000000000..a47d7dfda --- /dev/null +++ b/doc/devguide.rst @@ -0,0 +1,184 @@ +************************** + Sphinx Developer's Guide +************************** + +.. topic:: Abstract + + This document describes the development process of Sphinx, a documentation + system used by developers to document systems used by other developers to + develop other systems that may also be documented using Sphinx. + +The Sphinx source code is managed using `Mercurial`_ and is hosted on +`BitBucket`_. + + hg clone https://bitbucket.org/birkenfeld/sphinx + +.. rubric:: Community + +sphinx-users + Mailing list for user support. + +sphinx-dev + Mailing list for development related discussions. + +#pocoo on irc.freenode.net + IRC channel for development questions and user support. + + This channel is shared with other Pocoo projects. Archived logs are + available `here `_. + +.. _`BitBucket`: http://bitbucket.org +.. _`Mercurial`: http://mercurial.selenic.com/ + + +Bug Reports and Feature Requests +-------------------------------- + +If you have encountered a problem with Sphinx or have an idea for a new +feature, please submit it to the `issue tracker`_ on BitBucket or discuss it +on the sphinx-dev mailing list. + +For bug reports, please include the output produced during the build process +and also the log file Sphinx creates after it encounters an un-handled +exception. The location of this file should be shown towards the end of the +error message. + +Including or providing a link to the source files involved may help us fix the +issue. If possible, try to create a minimal project that produces the error +and post that instead. + +.. _`issue tracker`: http://bitbucket.org/birkenfeld/sphinx/issues + + +Contributing to Sphinx +---------------------- + +The recommended way to contribute code to Sphinx is to fork the Mercurial +repository on BitBucket and then submit a pull request after committing your +changes. + +These are the basic steps needed to start developing. + +.. todo:: + + Recommend using named branches? + + +#. Create an account on BitBucket. + +#. Fork the main Sphinx repository (`birkenfeld/sphinx + `_) using the BitBucket interface. + +#. Clone the forked repository to your machine. :: + + hg clone https://bitbucket.org/USERNAME/sphinx-fork + cd sphinx-fork + +#. Checkout the appropriate branch. + + For changes that should be included in the next minor release (namely bug + fixes), use the ``stable`` branch. :: + + hg checkout stable + + For new features or other substantial changes that should wait until the + next major release, use the ``default`` branch. + +#. Setup your Python environment. :: + + virtualenv ~/sphinxenv + . ~/sphinxenv/bin/activate + pip install -e . + +#. Hack, hack, hack. + + For tips on working with the code, see the `Coding Guide`_. + +#. Test, test, test. + + Run the unit tests:: + + pip install nose + make test + + Build the documentation and check the output for different builders:: + + cd docs + make clean html text man info latexpdf + + Run the unit tests under different Python environments using + :program:`tox`:: + + pip install tox + tox -v + + Add a new unit test in the ``tests`` directory if you can. + + For bug fixes, first add a test that fails without your changes and passes + after they are applied. + +#. Commit your changes. :: + + hg commit -m 'Add useful new feature that does this.' + + BitBucket recognizes `certain phrases`__ that can be used to automatically + update the issue tracker. + + For example:: + + hg commit -m 'Closes #42: Fix invalid markup in docstring of Foo.bar.' + + would close issue #42. + + __ https://confluence.atlassian.com/display/BITBUCKET/Automatically+Resolving+Issues+when+Users+Push+Code + +#. Push changes to your forked repo on BitBucket. :: + + hg push + +#. Submit a pull request from your repo to ``birkenfeld/sphinx`` using the + BitBucket interface. + + +Coding Guide +------------ + +* Try to use the same code style as used in the rest of the project. See the + `Pocoo Styleguide`__ for more information. + + __ http://flask.pocoo.org/docs/styleguide/ + +* For non-trivial changes, please update the :file:`CHANGES` file. If your + changes alter existing behavior, please document this. + +* New features should be documented. Include examples and use cases where + appropriate. If possible, include a sample that is displayed in the + generated output. + +* When adding a new configuration variable, be sure to document it and update + :file:`sphinx/quickstart.py`. + +* Use the included :program:`utils/check_sources.py` script to check for + common formatting issues (trailing whitespace, lengthy lines, etc). + + +Debugging Tips +~~~~~~~~~~~~~~ + +* Delete the build cache before building documents if you make changes in the + code by running the command ``make clean`` or using the + :option:`sphinx-build -E` option. + +* Use the :option:`sphinx-build -P` option to run Pdb on exceptions. + +* Use ``node.pformat()`` and ``node.asdom().toxml()`` to generate a printable + representation of the document structure. + +* Set the configuration variable :confval:`keep_warnings` to True so warnings + will be displayed in the generated output. + +* Set the configuration variable :confval:`nitpicky` to True so that Sphinx + will complain about references without a known target. + +* Set the debugging options in the `Docutils configuration file + `_. From 196cb44c30f7ef21d55df252f059414efc32699e Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Sun, 2 Dec 2012 01:18:54 -0600 Subject: [PATCH 110/250] devguide: Elaborate on pull requests --- doc/devguide.rst | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/doc/devguide.rst b/doc/devguide.rst index a47d7dfda..e175a6f47 100644 --- a/doc/devguide.rst +++ b/doc/devguide.rst @@ -1,6 +1,5 @@ -************************** - Sphinx Developer's Guide -************************** +Sphinx Developer's Guide +======================== .. topic:: Abstract @@ -18,7 +17,7 @@ The Sphinx source code is managed using `Mercurial`_ and is hosted on sphinx-users Mailing list for user support. -sphinx-dev +sphinx-dev Mailing list for development related discussions. #pocoo on irc.freenode.net @@ -53,11 +52,19 @@ and post that instead. Contributing to Sphinx ---------------------- -The recommended way to contribute code to Sphinx is to fork the Mercurial -repository on BitBucket and then submit a pull request after committing your -changes. +The recommended way for new contributors to submit code to Sphinx is to fork +the Mercurial repository on BitBucket and then submit a pull request after +committing the changes. -These are the basic steps needed to start developing. +Developers with write access to the main repository are also encouraged to +create pull requests for non-trivial changes so they may be reviewed before +being committed. + + +Getting Started +~~~~~~~~~~~~~~~ + +These are the basic steps needed to start developing on Sphinx. .. todo:: @@ -132,12 +139,15 @@ These are the basic steps needed to start developing. __ https://confluence.atlassian.com/display/BITBUCKET/Automatically+Resolving+Issues+when+Users+Push+Code -#. Push changes to your forked repo on BitBucket. :: +#. Push changes to your forked repository on BitBucket. :: hg push -#. Submit a pull request from your repo to ``birkenfeld/sphinx`` using the - BitBucket interface. +#. Submit a pull request from your repository to ``birkenfeld/sphinx`` using + the BitBucket interface. + + The pull request will be reviewed and if approved, merged by one of the + Sphinx developers. Coding Guide From c4bfaab2eef6681f921300bf1d0442269a7d5911 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Sun, 2 Dec 2012 23:37:25 +0900 Subject: [PATCH 111/250] update CHANGES --- CHANGES | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGES b/CHANGES index f82b9d250..3ab30858c 100644 --- a/CHANGES +++ b/CHANGES @@ -36,6 +36,24 @@ Release 1.2 (in development) * #1010: Make pngmath images transparent by default; IE7+ should handle it. +* #440: Fix coarse timestamp resolution in some filesystem generate wrong outdated file-list. + +* #1008: Fix test failures with Python 3.3. + +* #1029: Fix intersphinx_mapping values are not stable if mapping have plural key/value set with Python 3.3. + +* #920: Rescue PIL packaging issue that allow import Image without PIL namespace. Thanks to Marc Schlaich. + +* #1024: Improve Makefile/make.bat error message if Sphinx is not found. Thanks to anatoly techtonik. + +* #1037: Fix typos in Polish translation. Thanks to Jakub Wilk. + +* #1038: Fix cpp domain parser fails to parse C+11 "static constexpr" declarations. Thanks to Jakub Wilk. + +* #1043: Fix sphinx-quickstart asks again and again Y|N because input() return value with extra '\r' on Python-3.2.0 + Windows. Thanks to Régis Décamps. + +* #1041: Fix cpp domain parser fails to parse a const type with a modifier. + Release 1.1.3 (Mar 10, 2012) ============================ From 3a8673a66b6451a9e9bab3e6647c39b6044faffb Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Mon, 3 Dec 2012 00:55:47 -0600 Subject: [PATCH 112/250] devguide: Add guidelines for core developers --- doc/devguide.rst | 44 ++++++++++++++++++++++++++++++++------------ 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/doc/devguide.rst b/doc/devguide.rst index e175a6f47..ab4bc7409 100644 --- a/doc/devguide.rst +++ b/doc/devguide.rst @@ -54,11 +54,8 @@ Contributing to Sphinx The recommended way for new contributors to submit code to Sphinx is to fork the Mercurial repository on BitBucket and then submit a pull request after -committing the changes. - -Developers with write access to the main repository are also encouraged to -create pull requests for non-trivial changes so they may be reviewed before -being committed. +committing the changes. The pull request will then need to be approved by one +of the core developers before it is merged into the main repository. Getting Started @@ -66,11 +63,6 @@ Getting Started These are the basic steps needed to start developing on Sphinx. -.. todo:: - - Recommend using named branches? - - #. Create an account on BitBucket. #. Fork the main Sphinx repository (`birkenfeld/sphinx @@ -146,8 +138,34 @@ These are the basic steps needed to start developing on Sphinx. #. Submit a pull request from your repository to ``birkenfeld/sphinx`` using the BitBucket interface. - The pull request will be reviewed and if approved, merged by one of the - Sphinx developers. +#. Wait for a core developer to review your changes. + + +Core Developers +~~~~~~~~~~~~~~~ + +The core developers of Sphinx have write access to the main repository. They +can commit changes, accept/reject pull requests, and manage items on the issue +tracker. + +You do not need to be a core developer or have write access to be involved in +the development of Sphinx. You can submit patches or create pull requests +from forked repositories and have a core developer add the changes for you. + +The following are some general guidelines for core developers: + +* Questionable or extensive changes should be submitted as a pull request + instead of being committed directly to the main repository. The pull + request should be reviewed by another core developer before it is merged. + +* Trivial changes can be committed directly but be sure to keep the repository + in a good working state and that all tests pass before pushing your changes. + +* When committing code written by someone else, please attribute the original + author in the commit message and any relevant :file:`CHANGES` entry. + +* Using Mercurial named branches other than ``default`` and ``stable`` is not + encouraged. Coding Guide @@ -171,6 +189,8 @@ Coding Guide * Use the included :program:`utils/check_sources.py` script to check for common formatting issues (trailing whitespace, lengthy lines, etc). +* Add appropriate unit tests. + Debugging Tips ~~~~~~~~~~~~~~ From 1e66d33c7b8b656c0fc46ea3292e8e943fa9e30f Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Mon, 3 Dec 2012 01:36:34 -0600 Subject: [PATCH 113/250] Add changelog entry for devguide --- CHANGES | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES b/CHANGES index 3ab30858c..ef2be0838 100644 --- a/CHANGES +++ b/CHANGES @@ -54,6 +54,9 @@ Release 1.2 (in development) * #1041: Fix cpp domain parser fails to parse a const type with a modifier. +* PR#88: Added the "Sphinx Developer's Guide" (:file:`doc/devguide.rst`) + which outlines the basic development process of the Sphinx project. + Release 1.1.3 (Mar 10, 2012) ============================ From 6c48bc0d2f4a508f2b06205480c5021ef653c413 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 5 Dec 2012 11:43:36 +0900 Subject: [PATCH 114/250] refactoring --- sphinx/environment.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index 2e2dcfc00..7824f008a 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -194,6 +194,28 @@ class Locale(Transform): Replace translatable nodes with their translated doctree. """ default_priority = 0 + + @classmethod + def _collect_nodes(cls, nodelist, node_types, custom_cond_func=None): + if custom_cond_func is None: + custom_cond_func = lambda x: True + + collected = [node for node in nodelist + if isinstance(node, node_types) + and custom_cond_func(node)] + return collected + + @classmethod + def _collect_footnote_ref_nodes(cls, nodelist): + return cls._collect_nodes( + nodelist, + nodes.footnote_reference, + lambda n: n.get('auto') == 1) + + @classmethod + def _collect_ref_nodes(cls, nodelist): + return cls._collect_nodes(nodelist, nodes.reference) + def apply(self): env = self.document.settings.env settings, source = self.document.settings, self.document['source'] @@ -226,10 +248,8 @@ class Locale(Transform): if not isinstance(patch, nodes.paragraph): continue # skip for now - footnote_refs = [r for r in node.children - if isinstance(r, nodes.footnote_reference) - and r.get('auto') == 1] - refs = [r for r in node.children if isinstance(r, nodes.reference)] + footnote_refs = self._collect_footnote_ref_nodes(node.children) + refs = self._collect_ref_nodes(node.children) for i, child in enumerate(patch.children): # update leaves if isinstance(child, nodes.footnote_reference) \ From 8ac4aa62829391ca58fc0fd7b38e8d1d9c97a59f Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Tue, 4 Dec 2012 21:10:15 -0600 Subject: [PATCH 115/250] Add Docutils-native XML and pseudo-XML builders --- CHANGES | 3 ++ doc/Makefile | 13 +++++- doc/builders.rst | 23 ++++++++++ doc/config.rst | 10 +++++ sphinx/builders/__init__.py | 2 + sphinx/builders/xml.py | 85 +++++++++++++++++++++++++++++++++++++ sphinx/config.py | 3 ++ sphinx/quickstart.py | 32 +++++++++++++- sphinx/writers/xml.py | 58 +++++++++++++++++++++++++ tests/test_build.py | 8 ++++ 10 files changed, 235 insertions(+), 2 deletions(-) create mode 100644 sphinx/builders/xml.py create mode 100644 sphinx/writers/xml.py diff --git a/CHANGES b/CHANGES index ef2be0838..b67ed973e 100644 --- a/CHANGES +++ b/CHANGES @@ -57,6 +57,9 @@ Release 1.2 (in development) * PR#88: Added the "Sphinx Developer's Guide" (:file:`doc/devguide.rst`) which outlines the basic development process of the Sphinx project. +* Added the Docutils-native XML and pseudo-XML builders. See + :class:`XMLBuilder` and :class:`PseudoXMLBuilder`. + Release 1.1.3 (Mar 10, 2012) ============================ diff --git a/doc/Makefile b/doc/Makefile index 47951316a..a46b02271 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -13,7 +13,8 @@ ALLSPHINXOPTS = -d _build/doctrees $(PAPEROPT_$(PAPER)) \ I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(O) . .PHONY: help clean html dirhtml singlehtml text man pickle json htmlhelp \ - qthelp devhelp epub latex latexpdf changes linkcheck doctest + qthelp devhelp epub latex latexpdf changes linkcheck doctest xml \ + pseudoxml help: @echo "Please use \`make ' where is one of" @@ -147,3 +148,13 @@ info: @echo "Running Texinfo files through makeinfo..." make -C _build/texinfo info @echo "makeinfo finished; the Info files are in _build/texinfo." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) _build/xml + @echo + @echo "Build finished. The XML files are in _build/XML." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) _build/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in _build/pseudoxml." diff --git a/doc/builders.rst b/doc/builders.rst index 6600807d3..0075ad810 100644 --- a/doc/builders.rst +++ b/doc/builders.rst @@ -272,6 +272,29 @@ Note that a direct PDF builder using ReportLab is available in `rst2pdf Its name is ``linkcheck``. +.. module:: sphinx.builders.xml +.. class:: XMLBuilder + + This builder produces Docutils-native XML files. The output can be + transformed with standard XML tools such as XSLT processors into arbitrary + final forms. + + Its name is ``xml``. + + .. versionadded:: 1.2 + +.. class:: PseudoXMLBuilder + + This builder is used for debugging the Sphinx/Docutils "Reader to Transform + to Writer" pipeline. It produces compact pretty-printed "pseudo-XML", files + where nesting is indicated by indentation (no end-tags). External + attributes for all elements are output, and internal attributes for any + leftover "pending" elements are also given. + + Its name is ``pseudoxml``. + + .. versionadded:: 1.2 + Built-in Sphinx extensions that offer more builders are: diff --git a/doc/config.rst b/doc/config.rst index df5a208c6..0ff6d4051 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -1342,6 +1342,16 @@ Options for the linkcheck builder .. versionadded:: 1.2 +Options for the XML builder +--------------------------- + +.. confval:: xml_pretty + + If True, pretty-print the XML. Default is ``True``. + + .. versionadded:: 1.2 + + .. rubric:: Footnotes .. [1] A note on available globbing syntax: you can use the standard shell diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index 5240a1c73..4355b8012 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -334,4 +334,6 @@ BUILTIN_BUILDERS = { 'linkcheck': ('linkcheck', 'CheckExternalLinksBuilder'), 'websupport': ('websupport', 'WebSupportBuilder'), 'gettext': ('gettext', 'MessageCatalogBuilder'), + 'xml': ('xml', 'XMLBuilder'), + 'pseudoxml': ('xml', 'PseudoXMLBuilder'), } diff --git a/sphinx/builders/xml.py b/sphinx/builders/xml.py new file mode 100644 index 000000000..74c1fc067 --- /dev/null +++ b/sphinx/builders/xml.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.xml + ~~~~~~~~~~~~~~~~~~~ + + Docutils-native XML and pseudo-XML builders. + + :copyright: Copyright 2007-2012 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import codecs +from os import path + +from docutils.io import StringOutput + +from sphinx.builders import Builder +from sphinx.util.osutil import ensuredir, os_path +from sphinx.writers.xml import XMLWriter, PseudoXMLWriter + +class XMLBuilder(Builder): + """ + Builds Docutils-native XML. + """ + name = 'xml' + format = 'xml' + out_suffix = '.xml' + + _writer_class = XMLWriter + + def init(self): + pass + + def get_outdated_docs(self): + for docname in self.env.found_docs: + if docname not in self.env.all_docs: + yield docname + continue + targetname = self.env.doc2path(docname, self.outdir, + self.out_suffix) + try: + targetmtime = path.getmtime(targetname) + except Exception: + targetmtime = 0 + try: + srcmtime = path.getmtime(self.env.doc2path(docname)) + if srcmtime > targetmtime: + yield docname + except EnvironmentError: + # source doesn't exist anymore + pass + + def get_target_uri(self, docname, typ=None): + return '' + + def prepare_writing(self, docnames): + self.writer = self._writer_class(self) + + def write_doc(self, docname, doctree): + destination = StringOutput(encoding='utf-8') + self.writer.write(doctree, destination) + outfilename = path.join(self.outdir, os_path(docname) + self.out_suffix) + ensuredir(path.dirname(outfilename)) + try: + f = codecs.open(outfilename, 'w', 'utf-8') + try: + f.write(self.writer.output) + finally: + f.close() + except (IOError, OSError), err: + self.warn("error writing file %s: %s" % (outfilename, err)) + + def finish(self): + pass + + +class PseudoXMLBuilder(XMLBuilder): + """ + Builds pseudo-XML for display purposes. + """ + name = 'pseudoxml' + format = 'pseudoxml' + out_suffix = '.pseudoxml' + + _writer_class = PseudoXMLWriter diff --git a/sphinx/config.py b/sphinx/config.py index 2012634e1..eef8d31c6 100644 --- a/sphinx/config.py +++ b/sphinx/config.py @@ -184,6 +184,9 @@ class Config(object): # gettext options gettext_compact = (True, 'gettext'), + + # XML options + xml_pretty = (True, 'env'), ) def __init__(self, dirname, filename, overrides, tags): diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index 64c2e23ca..dd2df0df0 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -387,7 +387,7 @@ to the full path of the 'sphinx-build' executable. Alternatively you may add the Sphinx directory to PATH. If you don't have Sphinx installed, grab it from -http://sphinx-doc.org/ +http://sphinx-doc.org/ endef $(error $(MSG)) endif @@ -423,6 +423,8 @@ help: \t@echo " info to make Texinfo files and run them through makeinfo" \t@echo " gettext to make PO message catalogs" \t@echo " changes to make an overview of all changed/added/deprecated items" +\t@echo " xml to make Docutils-native XML files" +\t@echo " pseudoxml to make pseudoxml-XML files for display purposes" \t@echo " linkcheck to check all external links for integrity" \t@echo " doctest to run all doctests embedded in the documentation \ (if enabled)" @@ -547,6 +549,16 @@ doctest: \t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest \t@echo "Testing of doctests in the sources finished, look at the " \\ \t "results in $(BUILDDIR)/doctest/output.txt." + +xml: +\t$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml +\t@echo +\t@echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: +\t$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml +\t@echo +\t@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." ''' BATCHFILE = '''\ @@ -585,6 +597,8 @@ if "%%1" == "help" ( \techo. texinfo to make Texinfo files \techo. gettext to make PO message catalogs \techo. changes to make an overview over all changed/added/deprecated items +\techo. xml to make Docutils-native XML files +\techo. pseudoxml to make pseudoxml-XML files for display purposes \techo. linkcheck to check all external links for integrity \techo. doctest to run all doctests embedded in the documentation if enabled \tgoto end @@ -773,6 +787,22 @@ results in %%BUILDDIR%%/doctest/output.txt. \tgoto end ) +if "%%1" == "xml" ( +\t%%SPHINXBUILD%% -b xml %%ALLSPHINXOPTS%% %%BUILDDIR%%/xml +\tif errorlevel 1 exit /b 1 +\techo. +\techo.Build finished. The XML files are in %%BUILDDIR%%/xml. +\tgoto end +) + +if "%%1" == "pseudoxml" ( +\t%%SPHINXBUILD%% -b pseudoxml %%ALLSPHINXOPTS%% %%BUILDDIR%%/pseudoxml +\tif errorlevel 1 exit /b 1 +\techo. +\techo.Build finished. The pseudo-XML files are in %%BUILDDIR%%/pseudoxml. +\tgoto end +) + :end ''' diff --git a/sphinx/writers/xml.py b/sphinx/writers/xml.py new file mode 100644 index 000000000..02becb731 --- /dev/null +++ b/sphinx/writers/xml.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +""" + sphinx.writers.xml + ~~~~~~~~~~~~~~~~~~ + + Docutils-native XML and pseudo-XML writers. + + :copyright: Copyright 2007-2012 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from docutils import writers +from docutils.writers.docutils_xml import Writer as BaseXMLWriter +from docutils.writers.docutils_xml import XMLTranslator as BaseXMLTranslator + + +class XMLWriter(BaseXMLWriter): + + def __init__(self, builder): + BaseXMLWriter.__init__(self) + self.builder = builder + + def translate(self, *args, **kwargs): + self.document.settings.newlines = \ + self.document.settings.indents = \ + self.builder.env.config.xml_pretty + self.document.settings.xml_declaration = True + self.document.settings.doctype_declaration = True + return BaseXMLWriter.translate(self) + + +class XMLTranslator(BaseXMLTranslator): + def __init__(self, builder, doc): + BaseXMLTranslator.__init__(self, doc) + self.builder = builder + + +class PseudoXMLWriter(writers.Writer): + + supported = ('pprint', 'pformat', 'pseudoxml') + """Formats this writer supports.""" + + config_section = 'pseudoxml writer' + config_section_dependencies = ('writers',) + + output = None + """Final translated form of `document`.""" + + def __init__(self, builder): + writers.Writer.__init__(self) + self.builder = builder + + def translate(self): + self.output = self.document.pformat() + + def supports(self, format): + """This writer supports all format-specific elements.""" + return True diff --git a/tests/test_build.py b/tests/test_build.py index 5f24f89ac..87f5a14cc 100644 --- a/tests/test_build.py +++ b/tests/test_build.py @@ -61,3 +61,11 @@ else: @with_app(buildername='singlehtml', cleanenv=True) def test_singlehtml(app): app.builder.build_all() + +@with_app(buildername='xml') +def test_xml(app): + app.builder.build_all() + +@with_app(buildername='pseudoxml') +def test_pseudoxml(app): + app.builder.build_all() From 2472dcec3992c35e68562337e59d3104a8ee73ab Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 5 Dec 2012 13:11:16 +0900 Subject: [PATCH 116/250] checking whether the number of references is equal in both the translated form and the untranslated form? If they're not equal, emit a warning and don't bother trying to transfer the references. --- sphinx/environment.py | 22 ++++++++++++++-- tests/root/contents.txt | 1 + tests/root/i18n_refs_inconsistency.po | 36 ++++++++++++++++++++++++++ tests/root/i18n_refs_inconsistency.txt | 12 +++++++++ tests/test_intl.py | 28 +++++++++++++++++++- 5 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 tests/root/i18n_refs_inconsistency.po create mode 100644 tests/root/i18n_refs_inconsistency.txt diff --git a/sphinx/environment.py b/sphinx/environment.py index 7824f008a..d203f29e1 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -216,6 +216,23 @@ class Locale(Transform): def _collect_ref_nodes(cls, nodelist): return cls._collect_nodes(nodelist, nodes.reference) + def _is_ref_inconsistency(self, node1, node2): + """ + check equality of the number of reference in both the translated + form and the untranslated form. + """ + env = self.document.settings.env + for f in [self._collect_footnote_ref_nodes, + self._collect_ref_nodes, + ]: + if len(f(node1.children)) != len(f(node2.children)): + env.warn_node('The number of reference are inconsistent ' + 'in both the translated form and the ' + 'untranslated form. skip translation.', node1) + return True + + return False + def apply(self): env = self.document.settings.env settings, source = self.document.settings, self.document['source'] @@ -248,6 +265,9 @@ class Locale(Transform): if not isinstance(patch, nodes.paragraph): continue # skip for now + if self._is_ref_inconsistency(node, patch): + continue #skip translation. + footnote_refs = self._collect_footnote_ref_nodes(node.children) refs = self._collect_ref_nodes(node.children) @@ -257,8 +277,6 @@ class Locale(Transform): # use original 'footnote_reference' object. # this object is already registered in self.document.autofootnote_refs patch.children[i] = footnote_refs.pop(0) - # Some duplicated footnote_reference in msgstr cause - # IndexError in .pop(0). That is invalid msgstr. elif isinstance(child, nodes.reference): # reference should use original 'refname'. diff --git a/tests/root/contents.txt b/tests/root/contents.txt index 8fcd4a9bf..04dd84816 100644 --- a/tests/root/contents.txt +++ b/tests/root/contents.txt @@ -30,6 +30,7 @@ Contents: only i18n_footnote i18n_external_links + i18n_refs_inconsistency Python diff --git a/tests/root/i18n_refs_inconsistency.po b/tests/root/i18n_refs_inconsistency.po new file mode 100644 index 000000000..947190c7d --- /dev/null +++ b/tests/root/i18n_refs_inconsistency.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2012, foof +# This file is distributed under the same license as the foo package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: sphinx 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-12-05 08:28\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "i18n with refs inconsistency" +msgstr "I18N WITH REFS INCONSISTENCY" + +msgid "[100]_ for [#]_ footnote [ref2]_." +msgstr "FOR FOOTNOTE [ref2]_." + +msgid "for reference_." +msgstr "reference_ FOR reference_." + +msgid "This is a auto numbered footnote." +msgstr "THIS IS A AUTO NUMBERED FOOTNOTE." + +msgid "This is a named footnote." +msgstr "THIS IS A NAMED FOOTNOTE." + +msgid "This is a numbered footnote." +msgstr "THIS IS A NUMBERED FOOTNOTE." + diff --git a/tests/root/i18n_refs_inconsistency.txt b/tests/root/i18n_refs_inconsistency.txt new file mode 100644 index 000000000..24bd55920 --- /dev/null +++ b/tests/root/i18n_refs_inconsistency.txt @@ -0,0 +1,12 @@ +:tocdepth: 2 + +i18n with refs inconsistency +============================= + +* [100]_ for [#]_ footnote [ref2]_. +* for reference_. + +.. [#] This is a auto numbered footnote. +.. [ref2] This is a named footnote. +.. [100] This is a numbered footnote. +.. _reference: http://www.example.com diff --git a/tests/test_intl.py b/tests/test_intl.py index 1c7df2543..1273df867 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -12,15 +12,21 @@ from subprocess import Popen, PIPE import re +import os +from StringIO import StringIO from util import * from util import SkipTest +warnfile = StringIO() + + def setup_module(): (test_root / 'xx' / 'LC_MESSAGES').makedirs() # Compile all required catalogs into binary format (*.mo). - for catalog in 'bom', 'subdir', 'i18n_footnote', 'i18n_external_links': + for catalog in ('bom', 'subdir', 'i18n_footnote', 'i18n_external_links', + 'i18n_refs_inconsistency'): try: p = Popen(['msgfmt', test_root / '%s.po' % catalog, '-o', test_root / 'xx' / 'LC_MESSAGES' / '%s.mo' % catalog], @@ -90,6 +96,26 @@ def test_i18n_footnote_regression(app): assert result == expect +@with_app(buildername='text', warning=warnfile, + confoverrides={'language': 'xx', 'locale_dirs': ['.']}) +def test_i18n_warn_for_number_of_references_inconsistency(app): + app.builddir.rmtree(True) + app.builder.build(['i18n_refs_inconsistency']) + result = (app.outdir / 'i18n_refs_inconsistency.txt').text(encoding='utf-8') + expect = (u"\nI18N WITH REFS INCONSISTENCY" + u"\n****************************\n" + u"\n* [100] for [1] footnote [ref2].\n" + u"\n* for reference.\n" + u"\n[1] THIS IS A AUTO NUMBERED FOOTNOTE.\n" + u"\n[ref2] THIS IS A NAMED FOOTNOTE.\n" + u"\n[100] THIS IS A NUMBERED FOOTNOTE.\n") + assert result == expect + + warnings = warnfile.getvalue().replace(os.sep, '/') + expected_warning_expr = "i18n_refs_inconsistency.txt:\d+: WARNING: The number of reference are inconsistent in both the translated form and the untranslated form. skip translation." + assert len(re.findall(expected_warning_expr, warnings)) == 2 + + @with_app(buildername='html', confoverrides={'language': 'xx', 'locale_dirs': ['.']}) def test_i18n_keep_external_links(app): From 8a1cb703542f0ef0a4880f9d34c91de5da306e63 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 5 Dec 2012 13:11:30 +0900 Subject: [PATCH 117/250] refactoring --- tests/test_intl.py | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/tests/test_intl.py b/tests/test_intl.py index 1273df867..ee0ca70a5 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -25,27 +25,28 @@ warnfile = StringIO() def setup_module(): (test_root / 'xx' / 'LC_MESSAGES').makedirs() # Compile all required catalogs into binary format (*.mo). - for catalog in ('bom', 'subdir', 'i18n_footnote', 'i18n_external_links', - 'i18n_refs_inconsistency'): - try: - p = Popen(['msgfmt', test_root / '%s.po' % catalog, '-o', - test_root / 'xx' / 'LC_MESSAGES' / '%s.mo' % catalog], - stdout=PIPE, stderr=PIPE) - except OSError: - # The test will fail the second time it's run if we don't - # tear down here. Not sure if there's a more idiomatic way - # of ensuring that teardown gets run in the event of an - # exception from the setup function. - teardown_module() - raise SkipTest # most likely msgfmt was not found - else: - stdout, stderr = p.communicate() - if p.returncode != 0: - print stdout - print stderr - assert False, 'msgfmt exited with return code %s' % p.returncode - assert (test_root / 'xx' / 'LC_MESSAGES' / ('%s.mo' % catalog) - ).isfile(), 'msgfmt failed' + for dirpath, dirs, files in os.walk(test_root): + for f in [f for f in files if f.endswith('.po')]: + po = os.path.join(dirpath, f) + mo = test_root / 'xx' / 'LC_MESSAGES' / ( + os.path.relpath(po[:-3], test_root) + '.mo') + try: + p = Popen(['msgfmt', po, '-o', mo], + stdout=PIPE, stderr=PIPE) + except OSError: + # The test will fail the second time it's run if we don't + # tear down here. Not sure if there's a more idiomatic way + # of ensuring that teardown gets run in the event of an + # exception from the setup function. + teardown_module() + raise SkipTest # most likely msgfmt was not found + else: + stdout, stderr = p.communicate() + if p.returncode != 0: + print stdout + print stderr + assert False, 'msgfmt exited with return code %s' % p.returncode + assert mo.isfile(), 'msgfmt failed' def teardown_module(): From e9f3ad438b1a9e282c22f118a655be802bd9e4f0 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 5 Dec 2012 13:38:04 +0900 Subject: [PATCH 118/250] move i18n test documents to i18n subdir. --- tests/root/contents.txt | 4 +- .../external_links.po} | 0 .../external_links.txt} | 0 .../{i18n_footnote.po => i18n/footnote.po} | 0 .../{i18n_footnote.txt => i18n/footnote.txt} | 0 tests/root/i18n/index.txt | 7 +++ .../refs_inconsistency.po} | 0 .../refs_inconsistency.txt} | 0 tests/test_intl.py | 43 +++++++++++-------- 9 files changed, 33 insertions(+), 21 deletions(-) rename tests/root/{i18n_external_links.po => i18n/external_links.po} (100%) rename tests/root/{i18n_external_links.txt => i18n/external_links.txt} (100%) rename tests/root/{i18n_footnote.po => i18n/footnote.po} (100%) rename tests/root/{i18n_footnote.txt => i18n/footnote.txt} (100%) create mode 100644 tests/root/i18n/index.txt rename tests/root/{i18n_refs_inconsistency.po => i18n/refs_inconsistency.po} (100%) rename tests/root/{i18n_refs_inconsistency.txt => i18n/refs_inconsistency.txt} (100%) diff --git a/tests/root/contents.txt b/tests/root/contents.txt index 04dd84816..0a8ca00e2 100644 --- a/tests/root/contents.txt +++ b/tests/root/contents.txt @@ -28,9 +28,7 @@ Contents: extensions versioning/index only - i18n_footnote - i18n_external_links - i18n_refs_inconsistency + i18n/index Python diff --git a/tests/root/i18n_external_links.po b/tests/root/i18n/external_links.po similarity index 100% rename from tests/root/i18n_external_links.po rename to tests/root/i18n/external_links.po diff --git a/tests/root/i18n_external_links.txt b/tests/root/i18n/external_links.txt similarity index 100% rename from tests/root/i18n_external_links.txt rename to tests/root/i18n/external_links.txt diff --git a/tests/root/i18n_footnote.po b/tests/root/i18n/footnote.po similarity index 100% rename from tests/root/i18n_footnote.po rename to tests/root/i18n/footnote.po diff --git a/tests/root/i18n_footnote.txt b/tests/root/i18n/footnote.txt similarity index 100% rename from tests/root/i18n_footnote.txt rename to tests/root/i18n/footnote.txt diff --git a/tests/root/i18n/index.txt b/tests/root/i18n/index.txt new file mode 100644 index 000000000..f35e27663 --- /dev/null +++ b/tests/root/i18n/index.txt @@ -0,0 +1,7 @@ +.. toctree:: + :maxdepth: 2 + :numbered: + + footnote + external_links + refs_inconsistency diff --git a/tests/root/i18n_refs_inconsistency.po b/tests/root/i18n/refs_inconsistency.po similarity index 100% rename from tests/root/i18n_refs_inconsistency.po rename to tests/root/i18n/refs_inconsistency.po diff --git a/tests/root/i18n_refs_inconsistency.txt b/tests/root/i18n/refs_inconsistency.txt similarity index 100% rename from tests/root/i18n_refs_inconsistency.txt rename to tests/root/i18n/refs_inconsistency.txt diff --git a/tests/test_intl.py b/tests/test_intl.py index ee0ca70a5..47f6f1f5e 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -26,10 +26,13 @@ def setup_module(): (test_root / 'xx' / 'LC_MESSAGES').makedirs() # Compile all required catalogs into binary format (*.mo). for dirpath, dirs, files in os.walk(test_root): + dirpath = path(dirpath) for f in [f for f in files if f.endswith('.po')]: - po = os.path.join(dirpath, f) + po = dirpath / f mo = test_root / 'xx' / 'LC_MESSAGES' / ( os.path.relpath(po[:-3], test_root) + '.mo') + if not mo.parent.exists(): + mo.parent.makedirs() try: p = Popen(['msgfmt', po, '-o', mo], stdout=PIPE, stderr=PIPE) @@ -73,21 +76,23 @@ def test_subdir(app): assert result.startswith(u"\ntranslation\n***********\n\n") -@with_app(buildername='html', - confoverrides={'language': 'xx', 'locale_dirs': ['.']}) +@with_app(buildername='html', cleanenv=True, + confoverrides={'language': 'xx', 'locale_dirs': ['.'], + 'gettext_compact': False}) def test_i18n_footnote_break_refid(app): """test for #955 cant-build-html-with-footnotes-when-using""" - app.builder.build(['i18n_footnote']) - result = (app.outdir / 'i18n_footnote.html').text(encoding='utf-8') + app.builder.build(['i18n/footnote']) + result = (app.outdir / 'i18n' / 'footnote.html').text(encoding='utf-8') # expect no error by build -@with_app(buildername='text', - confoverrides={'language': 'xx', 'locale_dirs': ['.']}) +@with_app(buildername='text', cleanenv=True, + confoverrides={'language': 'xx', 'locale_dirs': ['.'], + 'gettext_compact': False}) def test_i18n_footnote_regression(app): """regression test for fix #955""" - app.builder.build(['i18n_footnote']) - result = (app.outdir / 'i18n_footnote.txt').text(encoding='utf-8') + app.builder.build(['i18n/footnote']) + result = (app.outdir / 'i18n' / 'footnote.txt').text(encoding='utf-8') expect = (u"\nI18N WITH FOOTNOTE" u"\n******************\n" # underline matches new translation u"\nI18N WITH FOOTNOTE INCLUDE THIS CONTENTS [ref] [1] [100]\n" @@ -97,12 +102,13 @@ def test_i18n_footnote_regression(app): assert result == expect -@with_app(buildername='text', warning=warnfile, - confoverrides={'language': 'xx', 'locale_dirs': ['.']}) +@with_app(buildername='text', warning=warnfile, cleanenv=True, + confoverrides={'language': 'xx', 'locale_dirs': ['.'], + 'gettext_compact': False}) def test_i18n_warn_for_number_of_references_inconsistency(app): app.builddir.rmtree(True) - app.builder.build(['i18n_refs_inconsistency']) - result = (app.outdir / 'i18n_refs_inconsistency.txt').text(encoding='utf-8') + app.builder.build(['i18n/refs_inconsistency']) + result = (app.outdir / 'i18n' / 'refs_inconsistency.txt').text(encoding='utf-8') expect = (u"\nI18N WITH REFS INCONSISTENCY" u"\n****************************\n" u"\n* [100] for [1] footnote [ref2].\n" @@ -113,16 +119,17 @@ def test_i18n_warn_for_number_of_references_inconsistency(app): assert result == expect warnings = warnfile.getvalue().replace(os.sep, '/') - expected_warning_expr = "i18n_refs_inconsistency.txt:\d+: WARNING: The number of reference are inconsistent in both the translated form and the untranslated form. skip translation." + expected_warning_expr = "i18n/refs_inconsistency.txt:\d+: WARNING: The number of reference are inconsistent in both the translated form and the untranslated form. skip translation." assert len(re.findall(expected_warning_expr, warnings)) == 2 -@with_app(buildername='html', - confoverrides={'language': 'xx', 'locale_dirs': ['.']}) +@with_app(buildername='html', cleanenv=True, + confoverrides={'language': 'xx', 'locale_dirs': ['.'], + 'gettext_compact': False}) def test_i18n_keep_external_links(app): """regression test for #1044""" - app.builder.build(['i18n_external_links']) - result = (app.outdir / 'i18n_external_links.html').text(encoding='utf-8') + app.builder.build(['i18n/external_links']) + result = (app.outdir / 'i18n' / 'external_links.html').text(encoding='utf-8') # external link check expect_line = u"""
  • EXTERNAL LINK TO Python.
  • """ From e9275d3f0c3a15d835d46cde66dd67eea8001de7 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 5 Dec 2012 19:35:07 +0900 Subject: [PATCH 119/250] change: Make readable-text a priority. If the number of reference does not match then some links will be broken. --- sphinx/environment.py | 94 +++++++++++++++---------------------------- tests/test_intl.py | 20 ++++++++- 2 files changed, 50 insertions(+), 64 deletions(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index d203f29e1..2c28cf975 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -195,44 +195,6 @@ class Locale(Transform): """ default_priority = 0 - @classmethod - def _collect_nodes(cls, nodelist, node_types, custom_cond_func=None): - if custom_cond_func is None: - custom_cond_func = lambda x: True - - collected = [node for node in nodelist - if isinstance(node, node_types) - and custom_cond_func(node)] - return collected - - @classmethod - def _collect_footnote_ref_nodes(cls, nodelist): - return cls._collect_nodes( - nodelist, - nodes.footnote_reference, - lambda n: n.get('auto') == 1) - - @classmethod - def _collect_ref_nodes(cls, nodelist): - return cls._collect_nodes(nodelist, nodes.reference) - - def _is_ref_inconsistency(self, node1, node2): - """ - check equality of the number of reference in both the translated - form and the untranslated form. - """ - env = self.document.settings.env - for f in [self._collect_footnote_ref_nodes, - self._collect_ref_nodes, - ]: - if len(f(node1.children)) != len(f(node2.children)): - env.warn_node('The number of reference are inconsistent ' - 'in both the translated form and the ' - 'untranslated form. skip translation.', node1) - return True - - return False - def apply(self): env = self.document.settings.env settings, source = self.document.settings, self.document['source'] @@ -265,32 +227,40 @@ class Locale(Transform): if not isinstance(patch, nodes.paragraph): continue # skip for now - if self._is_ref_inconsistency(node, patch): - continue #skip translation. + # auto-numbered foot note reference should use original 'ids'. + is_autonumber_footnote_ref = lambda node: \ + isinstance(node, nodes.footnote_reference) \ + and node.get('auto') == 1 + old_foot_refs = node.traverse(is_autonumber_footnote_ref) + new_foot_refs = patch.traverse(is_autonumber_footnote_ref) + if len(old_foot_refs) != len(new_foot_refs): + env.warn_node('The number of reference are inconsistent ' + 'in both the translated form and the ' + 'untranslated form. skip translation.', node) + for old, new in zip(old_foot_refs, new_foot_refs): + new['ids'] = old['ids'] + self.document.autofootnote_refs.remove(old) + self.document.note_autofootnote_ref(new) - footnote_refs = self._collect_footnote_ref_nodes(node.children) - refs = self._collect_ref_nodes(node.children) + # reference should use original 'refname'. + # * reference target ".. _Python: ..." is not translatable. + # * section refname is not translatable. + # * inline reference "`Python <...>`_" has no 'refname'. + is_refnamed_ref = lambda node: \ + isinstance(node, nodes.reference) \ + and 'refname' in node + old_refs = node.traverse(is_refnamed_ref) + new_refs = patch.traverse(is_refnamed_ref) + if len(old_refs) != len(new_refs): + env.warn_node('The number of reference are inconsistent ' + 'in both the translated form and the ' + 'untranslated form. skip translation.', node) + for old, new in zip(old_refs, new_refs): + new['refname'] = old['refname'] + self.document.note_refname(new) - for i, child in enumerate(patch.children): # update leaves - if isinstance(child, nodes.footnote_reference) \ - and child.get('auto') == 1: - # use original 'footnote_reference' object. - # this object is already registered in self.document.autofootnote_refs - patch.children[i] = footnote_refs.pop(0) - - elif isinstance(child, nodes.reference): - # reference should use original 'refname'. - # * reference target ".. _Python: ..." is not translatable. - # * section refname is not translatable. - # * inline reference "`Python <...>`_" has no 'refname'. - if refs and 'refname' in refs[0]: - refname = child['refname'] = refs.pop(0)['refname'] - self.document.refnames.setdefault( - refname, []).append(child) - # if number of reference nodes had been changed, that - # would often generate unknown link target warning. - - for child in patch.children: # update leaves + # update leaves + for child in patch.children: child.parent = node node.children = patch.children diff --git a/tests/test_intl.py b/tests/test_intl.py index 47f6f1f5e..6d084d13b 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -111,8 +111,8 @@ def test_i18n_warn_for_number_of_references_inconsistency(app): result = (app.outdir / 'i18n' / 'refs_inconsistency.txt').text(encoding='utf-8') expect = (u"\nI18N WITH REFS INCONSISTENCY" u"\n****************************\n" - u"\n* [100] for [1] footnote [ref2].\n" - u"\n* for reference.\n" + u"\n* FOR FOOTNOTE [ref2].\n" + u"\n* reference FOR reference.\n" u"\n[1] THIS IS A AUTO NUMBERED FOOTNOTE.\n" u"\n[ref2] THIS IS A NAMED FOOTNOTE.\n" u"\n[100] THIS IS A NUMBERED FOOTNOTE.\n") @@ -123,6 +123,22 @@ def test_i18n_warn_for_number_of_references_inconsistency(app): assert len(re.findall(expected_warning_expr, warnings)) == 2 +@with_app(buildername='html', cleanenv=True, + confoverrides={'language': 'xx', 'locale_dirs': ['.'], + 'gettext_compact': False}) +def test_i18n_link_to_undefined_reference(app): + app.builder.build(['i18n/refs_inconsistency']) + result = (app.outdir / 'i18n' / 'refs_inconsistency.html').text(encoding='utf-8') + + expected_expr = """reference""" + assert len(re.findall(expected_expr, result)) == 1 + + # the 2nd 'reference_' is to be internal-link instead of external-link. + # TODO: Can we re-use the same name named-reference? + expected_expr = """reference""" + assert len(re.findall(expected_expr, result)) == 1 + + @with_app(buildername='html', cleanenv=True, confoverrides={'language': 'xx', 'locale_dirs': ['.'], 'gettext_compact': False}) From bfe96c14a762a557a34785ca0f7dca4f9312fbc7 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Wed, 5 Dec 2012 20:52:19 +0900 Subject: [PATCH 120/250] fix: rescue extra named-reference that appeared in same translation message. --- sphinx/environment.py | 17 +++++++++++++++-- tests/root/i18n/refs_inconsistency.po | 3 +++ tests/root/i18n/refs_inconsistency.txt | 1 + tests/test_intl.py | 10 ++++++---- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index 2c28cf975..4a4ffa72d 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -251,12 +251,25 @@ class Locale(Transform): and 'refname' in node old_refs = node.traverse(is_refnamed_ref) new_refs = patch.traverse(is_refnamed_ref) + applied_refname_map = {} if len(old_refs) != len(new_refs): env.warn_node('The number of reference are inconsistent ' 'in both the translated form and the ' 'untranslated form. skip translation.', node) - for old, new in zip(old_refs, new_refs): - new['refname'] = old['refname'] + for new in new_refs: + if new['refname'] in applied_refname_map: + # 2nd appearance of the reference + new['refname'] = applied_refname_map[new['refname']] + elif old_refs: + # 1st appearance of the reference in old_refs + old = old_refs.pop(0) + refname = old['refname'] + new['refname'] = refname + applied_refname_map[new['refname']] = refname + else: + # the reference is not found in old_refs + applied_refname_map[new['refname']] = new['refname'] + self.document.note_refname(new) # update leaves diff --git a/tests/root/i18n/refs_inconsistency.po b/tests/root/i18n/refs_inconsistency.po index 947190c7d..9cab687fd 100644 --- a/tests/root/i18n/refs_inconsistency.po +++ b/tests/root/i18n/refs_inconsistency.po @@ -25,6 +25,9 @@ msgstr "FOR FOOTNOTE [ref2]_." msgid "for reference_." msgstr "reference_ FOR reference_." +msgid "normal text." +msgstr "ORPHAN REFERENCE: `I18N WITH REFS INCONSISTENCY`_." + msgid "This is a auto numbered footnote." msgstr "THIS IS A AUTO NUMBERED FOOTNOTE." diff --git a/tests/root/i18n/refs_inconsistency.txt b/tests/root/i18n/refs_inconsistency.txt index 24bd55920..c65c5b458 100644 --- a/tests/root/i18n/refs_inconsistency.txt +++ b/tests/root/i18n/refs_inconsistency.txt @@ -5,6 +5,7 @@ i18n with refs inconsistency * [100]_ for [#]_ footnote [ref2]_. * for reference_. +* normal text. .. [#] This is a auto numbered footnote. .. [ref2] This is a named footnote. diff --git a/tests/test_intl.py b/tests/test_intl.py index 6d084d13b..c2c4cb2a9 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -113,6 +113,7 @@ def test_i18n_warn_for_number_of_references_inconsistency(app): u"\n****************************\n" u"\n* FOR FOOTNOTE [ref2].\n" u"\n* reference FOR reference.\n" + u"\n* ORPHAN REFERENCE: I18N WITH REFS INCONSISTENCY.\n" u"\n[1] THIS IS A AUTO NUMBERED FOOTNOTE.\n" u"\n[ref2] THIS IS A NAMED FOOTNOTE.\n" u"\n[100] THIS IS A NUMBERED FOOTNOTE.\n") @@ -120,7 +121,7 @@ def test_i18n_warn_for_number_of_references_inconsistency(app): warnings = warnfile.getvalue().replace(os.sep, '/') expected_warning_expr = "i18n/refs_inconsistency.txt:\d+: WARNING: The number of reference are inconsistent in both the translated form and the untranslated form. skip translation." - assert len(re.findall(expected_warning_expr, warnings)) == 2 + assert len(re.findall(expected_warning_expr, warnings)) == 3 @with_app(buildername='html', cleanenv=True, @@ -131,11 +132,12 @@ def test_i18n_link_to_undefined_reference(app): result = (app.outdir / 'i18n' / 'refs_inconsistency.html').text(encoding='utf-8') expected_expr = """reference""" - assert len(re.findall(expected_expr, result)) == 1 + assert len(re.findall(expected_expr, result)) == 2 - # the 2nd 'reference_' is to be internal-link instead of external-link. - # TODO: Can we re-use the same name named-reference? expected_expr = """reference""" + assert len(re.findall(expected_expr, result)) == 0 + + expected_expr = """I18N WITH REFS INCONSISTENCY""" assert len(re.findall(expected_expr, result)) == 1 From 21355d324927a4ca98a7ca5b16bb948432b1c698 Mon Sep 17 00:00:00 2001 From: Takayuki Shimizukawa Date: Fri, 7 Dec 2012 16:38:21 +0900 Subject: [PATCH 121/250] Update warnings for inconsistency reference translations. Thanks @jonwaltman! --- sphinx/environment.py | 11 ++++------- tests/test_intl.py | 9 +++++++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index 4a4ffa72d..1adc68093 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -234,9 +234,8 @@ class Locale(Transform): old_foot_refs = node.traverse(is_autonumber_footnote_ref) new_foot_refs = patch.traverse(is_autonumber_footnote_ref) if len(old_foot_refs) != len(new_foot_refs): - env.warn_node('The number of reference are inconsistent ' - 'in both the translated form and the ' - 'untranslated form. skip translation.', node) + env.warn_node('inconsistent footnote references in ' + 'translated message', node) for old, new in zip(old_foot_refs, new_foot_refs): new['ids'] = old['ids'] self.document.autofootnote_refs.remove(old) @@ -253,9 +252,8 @@ class Locale(Transform): new_refs = patch.traverse(is_refnamed_ref) applied_refname_map = {} if len(old_refs) != len(new_refs): - env.warn_node('The number of reference are inconsistent ' - 'in both the translated form and the ' - 'untranslated form. skip translation.', node) + env.warn_node('inconsistent references in ' + 'translated message', node) for new in new_refs: if new['refname'] in applied_refname_map: # 2nd appearance of the reference @@ -1813,4 +1811,3 @@ class BuildEnvironment: if 'orphan' in self.metadata[docname]: continue self.warn(docname, 'document isn\'t included in any toctree') - diff --git a/tests/test_intl.py b/tests/test_intl.py index c2c4cb2a9..94b21e8d2 100644 --- a/tests/test_intl.py +++ b/tests/test_intl.py @@ -120,8 +120,13 @@ def test_i18n_warn_for_number_of_references_inconsistency(app): assert result == expect warnings = warnfile.getvalue().replace(os.sep, '/') - expected_warning_expr = "i18n/refs_inconsistency.txt:\d+: WARNING: The number of reference are inconsistent in both the translated form and the untranslated form. skip translation." - assert len(re.findall(expected_warning_expr, warnings)) == 3 + warning_fmt = u'.*/i18n/refs_inconsistency.txt:\\d+: ' \ + u'WARNING: inconsistent %s in translated message\n' + expected_warning_expr = ( + warning_fmt % 'footnote references' + + warning_fmt % 'references' + + warning_fmt % 'references') + assert re.search(expected_warning_expr, warnings) @with_app(buildername='html', cleanenv=True, From 319afe8fde13ed391efd979445e44548cae6949d Mon Sep 17 00:00:00 2001 From: Pauli Virtanen Date: Fri, 7 Dec 2012 21:13:54 +0200 Subject: [PATCH 122/250] BUG: ext/linkcode: do not detect linkcode config changes Since the linkcode_resolve is a function, it triggers configuration change on each rebuild, resulting to full rebuild always. It's better to make it not do that. --- sphinx/ext/linkcode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sphinx/ext/linkcode.py b/sphinx/ext/linkcode.py index ffe5b9c09..be834001f 100644 --- a/sphinx/ext/linkcode.py +++ b/sphinx/ext/linkcode.py @@ -69,4 +69,4 @@ def doctree_read(app, doctree): def setup(app): app.connect('doctree-read', doctree_read) - app.add_config_value('linkcode_resolve', None, 'env') + app.add_config_value('linkcode_resolve', None, '') From b44376f527e9df348a328b9fb2372975ff289dbe Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Mon, 10 Dec 2012 02:40:24 -0600 Subject: [PATCH 123/250] xml: Fix compatibility with docutils<0.9 --- sphinx/builders/xml.py | 13 +++++++++++++ sphinx/writers/xml.py | 7 ------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/sphinx/builders/xml.py b/sphinx/builders/xml.py index 74c1fc067..6f0a55190 100644 --- a/sphinx/builders/xml.py +++ b/sphinx/builders/xml.py @@ -12,6 +12,7 @@ import codecs from os import path +from docutils import nodes from docutils.io import StringOutput from sphinx.builders import Builder @@ -57,6 +58,18 @@ class XMLBuilder(Builder): self.writer = self._writer_class(self) def write_doc(self, docname, doctree): + # work around multiple string % tuple issues in docutils; + # replace tuples in attribute values with lists + doctree = doctree.deepcopy() + for node in doctree.traverse(nodes.Element): + for att, value in node.attributes.items(): + if isinstance(value, tuple): + node.attributes[att] = list(value) + value = node.attributes[att] + if isinstance(value, list): + for i, val in enumerate(value): + if isinstance(val, tuple): + value[i] = list(val) destination = StringOutput(encoding='utf-8') self.writer.write(doctree, destination) outfilename = path.join(self.outdir, os_path(docname) + self.out_suffix) diff --git a/sphinx/writers/xml.py b/sphinx/writers/xml.py index 02becb731..f09ee7258 100644 --- a/sphinx/writers/xml.py +++ b/sphinx/writers/xml.py @@ -11,7 +11,6 @@ from docutils import writers from docutils.writers.docutils_xml import Writer as BaseXMLWriter -from docutils.writers.docutils_xml import XMLTranslator as BaseXMLTranslator class XMLWriter(BaseXMLWriter): @@ -29,12 +28,6 @@ class XMLWriter(BaseXMLWriter): return BaseXMLWriter.translate(self) -class XMLTranslator(BaseXMLTranslator): - def __init__(self, builder, doc): - BaseXMLTranslator.__init__(self, doc) - self.builder = builder - - class PseudoXMLWriter(writers.Writer): supported = ('pprint', 'pformat', 'pseudoxml') From beae650645cadbfa3b9d453a180b184366703ba3 Mon Sep 17 00:00:00 2001 From: Jonathan Waltman Date: Mon, 10 Dec 2012 02:41:12 -0600 Subject: [PATCH 124/250] xml: Update sphinx-build documentation --- doc/invocation.rst | 7 +++++++ doc/man/sphinx-build.rst | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/doc/invocation.rst b/doc/invocation.rst index da052bdb6..9c04a6464 100644 --- a/doc/invocation.rst +++ b/doc/invocation.rst @@ -59,6 +59,13 @@ The :program:`sphinx-build` script has several options: **linkcheck** Check the integrity of all external links. + **xml** + Build Docutils-native XML files. + + **pseudoxml** + Build compact pretty-printed "pseudo-XML" files displaying the + internal structure of the intermediate document trees. + See :ref:`builders` for a list of all builders shipped with Sphinx. Extensions can add their own builders. diff --git a/doc/man/sphinx-build.rst b/doc/man/sphinx-build.rst index b7212a84b..0a5d4abb9 100644 --- a/doc/man/sphinx-build.rst +++ b/doc/man/sphinx-build.rst @@ -64,6 +64,13 @@ linkcheck pickle / json Generates serialized HTML files for use in web applications. +xml + Generates Docutils-native XML files. + +pseudoxml + Generates compact pretty-printed "pseudo-XML" files displaying the + internal structure of the intermediate document trees. + Options ------- From 5b54c253bbf4239e5d327738f0bba4d0d68a6062 Mon Sep 17 00:00:00 2001 From: Denis Date: Mon, 10 Dec 2012 14:13:35 +0400 Subject: [PATCH 125/250] Upgrade for 'default' theme: collapsiblesidebar works with rightsidebar --- doc/theming.rst | 3 +- .../static/{sidebar.js => sidebar.js_t} | 38 +++++++++++++------ 2 files changed, 27 insertions(+), 14 deletions(-) rename sphinx/themes/default/static/{sidebar.js => sidebar.js_t} (80%) diff --git a/doc/theming.rst b/doc/theming.rst index 334f6ffe7..0375bc710 100644 --- a/doc/theming.rst +++ b/doc/theming.rst @@ -111,8 +111,7 @@ These themes are: - **collapsiblesidebar** (true or false): Add an *experimental* JavaScript snippet that makes the sidebar collapsible via a button on its side. - *Doesn't work together with "rightsidebar" or "stickysidebar".* Defaults to - false. + *Doesn't work with "stickysidebar".* Defaults to false. - **externalrefs** (true or false): Display external links differently from internal links. Defaults to false. diff --git a/sphinx/themes/default/static/sidebar.js b/sphinx/themes/default/static/sidebar.js_t similarity index 80% rename from sphinx/themes/default/static/sidebar.js rename to sphinx/themes/default/static/sidebar.js_t index a45e1926a..e6df02e20 100644 --- a/sphinx/themes/default/static/sidebar.js +++ b/sphinx/themes/default/static/sidebar.js_t @@ -22,6 +22,20 @@ */ $(function() { + {% if theme_rightsidebar|tobool %} + {% set side = 'right' %} + {% set opposite = 'left' %} + {% set initial_label = '»' %} + {% set expand_label = '«' %} + {% set collapse_label = '»' %} + {% else %} + {% set side = 'left' %} + {% set opposite = 'right' %} + {% set initial_label = '«' %} + {% set expand_label = '»' %} + {% set collapse_label = '«' %} + {% endif %} + // global elements used by the functions. // the 'sidebarbutton' element is defined as global after its // creation, in the add_sidebar_button function @@ -34,7 +48,7 @@ $(function() { // original margin-left of the bodywrapper and width of the sidebar // with the sidebar expanded - var bw_margin_expanded = bodywrapper.css('margin-left'); + var bw_margin_expanded = bodywrapper.css('margin-{{side}}'); var ssb_width_expanded = sidebar.width(); // margin-left of the bodywrapper and width of the sidebar @@ -60,38 +74,38 @@ $(function() { function collapse_sidebar() { sidebarwrapper.hide(); sidebar.css('width', ssb_width_collapsed); - bodywrapper.css('margin-left', bw_margin_collapsed); + bodywrapper.css('margin-{{side}}', bw_margin_collapsed); sidebarbutton.css({ - 'margin-left': '0', + 'margin-{{side}}': '0', 'height': bodywrapper.height() }); - sidebarbutton.find('span').text('»'); + sidebarbutton.find('span').text('{{expand_label}}'); sidebarbutton.attr('title', _('Expand sidebar')); document.cookie = 'sidebar=collapsed'; } function expand_sidebar() { - bodywrapper.css('margin-left', bw_margin_expanded); + bodywrapper.css('margin-{{side}}', bw_margin_expanded); sidebar.css('width', ssb_width_expanded); sidebarwrapper.show(); sidebarbutton.css({ - 'margin-left': ssb_width_expanded-12, + 'margin-{{side}}': ssb_width_expanded-12, 'height': bodywrapper.height() }); - sidebarbutton.find('span').text('«'); + sidebarbutton.find('span').text('{{collapse_label}}'); sidebarbutton.attr('title', _('Collapse sidebar')); document.cookie = 'sidebar=expanded'; } function add_sidebar_button() { sidebarwrapper.css({ - 'float': 'left', - 'margin-right': '0', + 'float': '{{side}}', + 'margin-{{opposite}}': '0', 'width': ssb_width_expanded - 28 }); // create the button sidebar.append( - '
    «
    ' + '
    {{initial_label}}
    ' ); var sidebarbutton = $('#sidebarbutton'); light_color = sidebarbutton.css('background-color'); @@ -110,12 +124,12 @@ $(function() { sidebarbutton.attr('title', _('Collapse sidebar')); sidebarbutton.css({ 'color': '#FFFFFF', - 'border-left': '1px solid ' + dark_color, + 'border-{{side}}': '1px solid ' + dark_color, 'font-size': '1.2em', 'cursor': 'pointer', 'height': bodywrapper.height(), 'padding-top': '1px', - 'margin-left': ssb_width_expanded - 12 + 'margin-{{side}}': ssb_width_expanded - 12 }); sidebarbutton.hover( From 50fadb9e94078e38fa9b3d2974171cd6397bc31a Mon Sep 17 00:00:00 2001 From: Roland Meister Date: Mon, 10 Dec 2012 21:54:11 +0100 Subject: [PATCH 126/250] Bug #1047: templating toctree()'s includehidden argument Document the includehidden option and give it sane defaults. See bug #1047 for implementation alternatives. --- doc/templating.rst | 3 +++ sphinx/builders/html.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/doc/templating.rst b/doc/templating.rst index 05a1346c0..b9dfc683b 100644 --- a/doc/templating.rst +++ b/doc/templating.rst @@ -391,3 +391,6 @@ are in HTML form), these variables are also available: * ``titles_only`` (false by default): if true, put only toplevel document titles in the tree + + * ``includehidden`` (false by default): if true, the TOC tree will also + contain hidden entries. diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index f5218673f..7fa42057f 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -653,6 +653,8 @@ class StandaloneHTMLBuilder(Builder): self.indexer.feed(pagename, title, doctree) def _get_local_toctree(self, docname, collapse=True, **kwds): + if 'includehidden' not in kwds: + kwds['includehidden'] = False return self.render_partial(self.env.get_toctree_for( docname, self, collapse, **kwds))['fragment'] From 567671f4d84f22c8528a098db431c4d36323c808 Mon Sep 17 00:00:00 2001 From: Roland Meister Date: Mon, 10 Dec 2012 22:01:01 +0100 Subject: [PATCH 127/250] Bug #1046: templating toctree() does not expand to maxdepth past maxdepth If the current page is nested larger than maxdepth it gets deleted before it can be marked as current. The toctree then callapses to the top entries. Split _walk_depth in two parts, first just add the current tag, and remove unneeded entries in a second call. --- sphinx/environment.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sphinx/environment.py b/sphinx/environment.py index cada082d7..69dcdf7de 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -1342,18 +1342,22 @@ class BuildEnvironment: if maxdepth > 0 and depth > maxdepth: subnode.parent.replace(subnode, []) else: - # to find out what to collapse, *first* walk subitems, - # since that determines which children point to the - # current page + # recurse on children _walk_depth(subnode, depth+1, maxdepth) # cull sub-entries whose parents aren't 'current' if (collapse and depth > 1 and 'iscurrent' not in subnode.parent): subnode.parent.remove(subnode) + def _mark_current(node): + """Mark current page and its parents with the 'current' class.""" + for subnode in node.children[:]: + if isinstance(subnode, (addnodes.compact_paragraph, + nodes.list_item, nodes.bullet_list)): + # for

    ,

  • and